2012-04-19 74 views
2

_ViewStart.cshtml的Html不正确的渲染并没有Viewbag.Title使用Ajax.ActionLinks

@{ 
    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和一些小测试文本。

这里有一件事出错了。

当我点击其中一个Ajax.ActionLInks时,虽然View在#ContentPanel中正确呈现,但每个View(用户/组/权限)的标题都是不可见的,但是当我检查html源代码时:

ContentPanel中的内容是索引视图中的内容?

这是为什么,我怎样才能为每个Ajax.ActionLink设置我的View标题?

<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> 

回答

1

当你查看源代码,你看那个初始加载源;通过AJAX加载的内容不会出现。但是,如果您使用DOM检查器,它将显示动态加载的内容。至少这是它在Chrome中的工作方式;我想其他浏览器是一样的。

检查DOM检查器,查看代码是否符合您的期望(右键单击“Chrome和Firefox上的Inspect元素”)。

至于设置标题,那不能用AJAX完成,至少不是没有一些Javascript帮助。在部分视图中,请尝试使用以下Javascript:

<script> 
    document.title = "My New Title Here"; 
</script> 
+0

这将是答案的50%。为什么当我点击一个Ajax.ActionLink时,我的标题没有显示,我该如何解决? – Pascal 2012-04-19 20:12:38

+0

我更新了答案......我希望它有帮助。 – 2012-04-19 20:24:59

+0

我会将您的答案标记为独立于此进一步问题的解决方案,也许您也知道答案:)我的MainController Index操作实际上毫无价值。它只是一个起点......是不是可以直接使用_Layout.cshtml文件开始? – Pascal 2012-04-19 20:48:35