2

_ViewStart.cshtml

@{
    Layout = Request.IsAjaxRequest() ? null : "~/Views/Shared/_Layout.cshtml";     
}

_Layout.cshtml

...
</head>
<body>
    <div id="NavigationPanel">
        @{ AjaxOptions options = new AjaxOptions
       {
           InsertionMode = InsertionMode.Replace,
           UpdateTargetId = "ContentPanel",
           OnBegin = "OnBeginAnimateContentPanel",
           OnComplete = "OnCompleteAnimateContentPanel",
       };}
        <div>
            <p>@Ajax.ActionLink("Users", "Index", "User", options)</p>
            <p>@Ajax.ActionLink("Groups", "Index", "Group", options)</p>
            <p>@Ajax.ActionLink("Permissions", "Index", "Permission", options)</p>
        </div>
    </div>
    <div id="ContentPanel">
        @RenderBody()
    </div>
</body>
</html>

Global.Asax.cs

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Main", action = "Index", id = UrlParameter.Optional }
    );
}

MainController.Indexアクション:

public ActionResult Index()
{
    return View();
}

メインビューIndex.cshtml

@{
    ViewBag.Title = "Test-Index";
}

this is the Index View of the MainController

ユーザー/グループ/権限コントローラーのインデックスビュー+アクションは、MainControllerのインデックスに似ています。タイトルはViewBagといくつかの小さなテストテキストに設定されています。

ここで問題が1つあります。

各ビューのタイトル(ユーザー/グループ/権限)は表示されませんが、これらのAjax.ActionLInksの1つをクリックすると、ビューは#ContentPanelで正しくレンダリングされますが、htmlソースコードを確認すると次のようになります。

ContentPanelのコンテンツは、インデックスビューのコンテンツです???

それはなぜですか。また、各Ajax.ActionLinkにビューのタイトルを設定するにはどうすればよいですか?

<body>
  <div id="NavigationPanel">
    <p><a data-ajax="true" data-ajax-begin="OnBeginAnimateContentPanel" data-ajax-complete="OnCompleteAnimateContentPanel" data-ajax-mode="replace" data-ajax-update="#ContentPanel" href="/User">Users</a></p>
    <p><a data-ajax="true" data-ajax-begin="OnBeginAnimateContentPanel" data-ajax-complete="OnCompleteAnimateContentPanel" data-ajax-mode="replace" data-ajax-update="#ContentPanel" href="/Group">Groups</a></p>
    <p><a data-ajax="true" data-ajax-begin="OnBeginAnimateContentPanel" data-ajax-complete="OnCompleteAnimateContentPanel" data-ajax-mode="replace" data-ajax-update="#ContentPanel" href="/Permission">Permissions</a></p>
  </div>
  <div id="ContentPanel">
    this is the text within the Index View of the MainController
  </div>
</body>
4

1 に答える 1

1

ソースを表示すると、最初にロードされたソースが表示されます。AJAXを介してロードされたコンテンツは表示されません。ただし、DOMインスペクターを使用すると、動的に読み込まれたコンテンツが表示されます。少なくとも、これはChromeでの動作方法です。他のブラウザも同じだと思います。

DOMインスペクターをチェックし、コードが期待どおりであるかどうかを確認します(右クリックして、ChromeとFirefoxの[要素の検査]を選択します)。

タイトルの設定に関しては、少なくともJavascriptの助けがなければ、AJAXでは実行できません。部分的なビューで、次のJavascriptを試してください。

<script>
  document.title = "My New Title Here";
</script>
于 2012-04-19T19:59:06.383 に答える