ASP.NET MVCイントラネットアプリケーションには、現在のユーザーのWindowsログインを使用してユーザーのデフォルトホームサイトに属するデータを取得するデータリポジトリがあります。ログインにはサイト識別子が含まれています。リポジトリクラスは、HttpContext.Current.User.Identityにアクセスし、ログインからサイトIDを抽出する唯一の場所です。したがって、アプリケーションは1つのユーザーサイトのデータのみを処理します。ユーザーがサイトメニューから別のサイト名のリンクをクリックすると、他のサイトのデータを表示できるようになりました。サイトメニューはマスターページにあります。ユーザーが任意のサイトリンクをクリックすると、サイトスコープを更新してから、そのサイトリンクが新しいサイトスコープでクリックされる前に実行されたアクションを再実行する必要があります。たとえば、ユーザーがリクエストリストを実行すると、デフォルトではユーザーのデフォルトサイトからのリクエストのみが表示されます。ユーザーが別のサイトをクリックすると、サイトの要求が表示されます。アプリには多くのコントローラーアクションがありますが、私は各コントローラーと既存のルートの各アクションを変更しないことをお勧めします。サイトスコープを設定するアクションで新しいコントローラを作成することを考えていますが、新しいコントローラのアクションが実行される前にどのアクションが実行されたかを認識させる方法はわかりません。スコープの変更を維持するためにSession変数を使用する必要がありますか?アクションフィルタは私のアプリを再因子化する良い方法ですか?コードサンプルの提案は感謝しています。ありがとうございました。コントローラのアクション履歴
0
A
答えて
0
セッション変数を作成してリダイレクトを実行するアクションで新しいコントローラを作成しました。リポジトリでは、セッション変数がチェックされ、ユーザーのホームサイトと同じであるかどうかが確認されます。セッション変数の値が異なる場合は、セッション変数の値が戻り値になります。 SiteController.Index()のIndex.aspxはUserControlを返します。
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<VETS.Models.Site>>" %>
<ul id="menu">
<% foreach (var item in Model)
{ %>
<li><%: Html.ActionLink(item.SiteName, "SetSiteScope", new { siteID = item.SiteID })%></li>
<%
} %>
</ul>
public class SiteController : Controller
{
public ActionResult SetSiteScope(short siteID)
{
HttpContext.Session.Add("CurrentSiteID",siteID);
//var routeData = ControllerContext.RouteData;
//routeData.Route.ToString();
//var actionName = ControllerContext.RouteData.GetRequiredString("action");
//return RedirectToAction(actionName, "Transfers");
Uri prevURL = HttpContext.Request.UrlReferrer;
return Redirect(prevURL.ToString());
}
}
public class vRepository : IvRepository
{
public Site CurrentSite()
{
if (HttpContext.Current.Session != null && HttpContext.Current.Session["CurrentSiteID"] != null)
{
targetSiteID = short.Parse(HttpContext.Current.Session["CurrentSiteID"].ToString());
targetSite = SiteList().Single(s => s.SiteID == targetSiteID);
}
return targetSite;
}
}
関連する問題
- 1. リポジトリ間の履歴履歴
- 2. GWT履歴:履歴トークン
- 3. アンドロイドのクロムの履歴履歴
- 4. データベースの履歴
- 5. デッドロックの履歴
- 6. IEの履歴
- 7. トリガーベースの履歴
- 8. Oracle UCM - ワークフローコンテンツのアクション履歴ログの保存場所
- 9. さまざまな種類のアクションのアクション履歴データベースを設計する
- 10. visualvm履歴グラフ
- 11. ワードプレス|パスワードリセット履歴
- 12. SVN:ユーザーチェックアウト履歴?
- 13. HTML5履歴API
- 14. Rワークスペース履歴
- 15. LDAPログオン履歴
- 16. スカッシュgitの履歴
- 17. javascriptのブラウザ履歴
- 18. リモート履歴のログ
- 19. Android SMSの履歴
- 20. Androidのダウンロード履歴
- 21. クリップボード履歴のEclipse
- 22. jqueryの履歴プラグイン
- 23. Facebookの履歴pushstate
- 24. ロジックアプリケーションのトリガー履歴
- 25. Confluenceのバージョン履歴
- 26. Android TextViewの履歴
- 27. リモートリポジトリのコミット履歴
- 28. smartgwtブラウザの履歴
- 29. JavaScriptの履歴バックフック
- 30. pygit2ブロブの履歴