【问题标题】:How to update Html document title with @Ajax.ActionLink如何使用 @Ajax.ActionLink 更新 Html 文档标题
【发布时间】:2012-11-21 13:48:25
【问题描述】:

单击 Ajax.ActionLink 时,我希望页面标题根据 ViewBag.Title 自动更改。我可以这样做,但我无法从 ActionExecutedFilter 访问在“razor.cshtml”文件中分配的 ViewBag.Title。我可以从 ActionExecutedFilter 访问仅在 Action Method 中分配的 ViewBag.Title。

ActionExecutedFilter 可能是这样的:

string scriptText = "<script type='text/javascript'>document.title = '" 
                    + ViewBag.Title + "';</script>";
filterContext.HttpContext.Response.Write(scriptText);

如何做到这一点?

【问题讨论】:

  • 您不考虑使用 jquery 请求操作并获取json 对象来更新您在Ajax.ActionLink 上设置的UpdateTargetId 元素并将json 对象的另一个属性应用于@987654325 @?
  • 我上面指定的方式更有吸引力,如果我可以从过滤器中做到。
  • 您无法按照显示代码的方式进行操作。当您发出 ajax 请求时,您的结果很可能是 JSON 或 HTML 视图。您需要捕获 OnSuccess 事件并使用您从操作中获得的结果集更新您的页面标题。您需要查看 MVC 的工作原理,您尝试的内容存在一些根本缺陷。

标签: asp.net asp.net-mvc razor asp.net-mvc-4


【解决方案1】:

我认为这可以解决您的问题。但是它没有使用 ViewBag,但标题的值也将与您的部分视图文件相关联,如果我理解得很好,这是您的意图。

你的部分观点

<span id="mySpan" style="display:none">Page header</span>
@Ajax.ActionLink("MyLink", "Random", 
                 new AjaxOptions() { HttpMethod = "GET", 
                                     UpdateTargetId = "random", 
                                     OnSuccess = "document.title = document.getElementById('mySpan').innerHTML" 
                  });

<div id="random">
    Random goes here.
</div>

您要从部分视图设置到文档标题的值隐藏在跨度内(它也可能是某些标题 &lt;h1/&gt; 或子标题 &lt;h2/&gt; 的值...取决于您的需要)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多