如何操作asp.net mvc5中ViewBag.Title中的文本

时间:2018-04-25 10:43:37

标签: c# asp.net-mvc asp.net-mvc-5.2

我有一个标题如下的页面:

ViewBag.Title = "Find and hire freelancers online, find the right freelance workers with ease and hire a freelancer online";

我在同一页面上还有一个下拉列表:

@Html.DropDownList("serviceType", ViewBag.ServiceList as List<SelectListItem>, new 
{ 
  name  = "serviceType", 
  id = "serviceType", 
  @class = "form-control filterEmpty", 
  onchange = "serviceTypeChange(this,true)" 
})

在更改下拉列表时,ViewBag.Title应为:

ViewBag.Title = "Engineering Services";

以上&#34;工程服务&#34;是我的下拉文字。所有这一切都应该在没有页面加载的情我不知道如何将此下拉文字传递给ViewBag.Title,请帮助我。

最后我想要的是我想在下拉列表更改中更新页面标题。

1 个答案:

答案 0 :(得分:0)

我挖出an old answer of mine来解决这个话题。你想要的是不可能的,你误解了ViewBag应该如何使用它。

以下是链接答案的副本。请注意,原始问题询问如何使用jQuery,但答案本身同样适用于您的情况。

您误解了ViewBag的工作原理。

在MVC中工作,并打开网页时,这就是(大致)发生的事情:

  1. 运行FooController的方法'索引'。最后,返回一个视图。
  2. 然后,您的MVC应用程序将为您找到该视图,并根据它在相关的.aspx文件中找到的HTML开始呈现它。如果程序遇到诸如“@ ViewBag.Id”之类的项目,它基本上会用“.Id”值进行字符串替换。 (它有点复杂,但为了争论,它基本上是一个字符串替换。)
  3. 渲染后,HTML文档将发送到您的浏览器,然后显示它。
  4. 当您的浏览器获取该页面时,您的ViewBag基本上已经“超出范围”。这是因为您的ASP(MVC)应用程序使用ViewBag,但Javascript只在Web浏览器文档中有一个范围(这是通过应用程序返回到浏览器的HTML代码, 之后ViewBag已超出范围.Javascript不是MVC应用程序的一部分,只是结果网页。

    所以简短的回答是,不,你不能那样做。尝试将其视为内联字符串替换。 您只能将ViewBag值放入HTML页面,而不是相反。

    假设您的Id为5,则aspx文件中包含以下代码:

    $(".btn").on("click",function(){
        @ViewBag.Id = $(this).attr("id")
    });
    

    将作为

    发送到浏览器
    $(".btn").on("click",function(){
        5 = $(this).attr("id")
    });
    

    由于您的浏览器只看到最后一部分,因此在Javascript中没有意义。在您的情况下,语法错误,它只是意味着您的变量尚未初始化,并且您正在尝试访问null

    对你来说,问题仍然是一样的。 ViewBag仅在呈现网页时使用。当您的浏览器加载页面(以及页面上的任何后续用户操作)时,ViewBag已被丢弃。

    即使你能以某种方式更新它,它也不会对更新的值做任何事情。它已经呈现了它所需的视图。

    如果您想在页面上发生某些事情,那么您必须在页面本身上更改它(直接使用JS或JS库)。