C# 使用Razor单击按钮时如何设置变量?

C# 使用Razor单击按钮时如何设置变量?,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我有一个按钮,单击该按钮时,将更改变量\u name的值。但是当我单击更改名称然后单击刷新时,这不起作用 查看 @{ var _name = ViewContext.RouteData.Values["name"].ToString(); } <div> <h1>Hello, @name!</h1> <button type="button" onclick="@(_name = "John Doe")">Change N

我有一个按钮,单击该按钮时,将更改变量
\u name
的值。但是当我单击
更改名称
然后单击
刷新
时,这不起作用

查看

@{
    var _name = ViewContext.RouteData.Values["name"].ToString();
}

<div>
    <h1>Hello, @name!</h1>
    <button type="button" onclick="@(_name = "John Doe")">Change Name</button>

    <button type="button" onclick="location.href = '@Url.Action("MyAction", new { name = _name })'">Refresh</button>
</div>

刷新时,h1应该说“你好,John Doe!”。使用Razor在HTML中设置变量的正确方法是什么?

我认为您走错了方向。这样做

  • 名称
    放入
    模型的属性中
  • 使用
    Html.HiddenFor
    name
  • 使用
    onClick上的
    javascript
    更改隐藏字段的值
  • 发布表单时,模型中有name的新值,不再需要
    new{name=\u name}
  • 您可以使用此选项,而不是在模型中使用
    name
    hiddenfor

    Html.Hidden("name", ViewData("name")) 
    
    然后通过这个隐藏值为您的链接创建url

    另外,使用
    RouteData
    对您来说不是一个好主意,我建议您改用
    ViewData[“xxx”]


    我认为你走错了方向。这样做

  • 名称
    放入
    模型的属性中
  • 使用
    Html.HiddenFor
    name
  • 使用
    onClick上的
    javascript
    更改隐藏字段的值
  • 发布表单时,模型中有name的新值,不再需要
    new{name=\u name}
  • 您可以使用此选项,而不是在模型中使用
    name
    hiddenfor

    Html.Hidden("name", ViewData("name")) 
    
    然后通过这个隐藏值为您的链接创建url

    另外,使用
    RouteData
    对您来说不是一个好主意,我建议您改用
    ViewData[“xxx”]


    我认为您混淆了服务器端和客户端逻辑。服务器上存在razor变量,并且仅在当前请求期间存在。当我按下刷新按钮时,
    Url.Action()
    不发送新值吗@半径
    onclick=“@(_name=“John Doe”)”
    不会在客户端单击上设置服务器端变量
    \u name
    。所有服务器端代码在HTML(没有任何服务器端代码,只有代码结果)发送到浏览器之前执行。我认为您混淆了服务器端和客户端逻辑。服务器上存在razor变量,并且仅在当前请求期间存在。当我按下刷新按钮时,
    Url.Action()
    不发送新值吗@半径
    onclick=“@(_name=“John Doe”)”
    不会在客户端单击上设置服务器端变量
    \u name
    。所有服务器端代码在HTML(没有任何服务器端代码,只有该代码的结果)发送到浏览器之前执行。为了简单起见,我精简了代码,但是如果我已经传入(比方说)一个食品模型呢?在那个模型上加上这个名字并不理想,因为它是人的名字,而不是食物的名字。我会试试这个,会让你知道的。谢谢在实施此更改之前,请查看并了解ViewData的工作原理!为了简单起见,我简化了我的代码,但是如果我已经传递了一个食物模型呢?在那个模型上加上这个名字并不理想,因为它是人的名字,而不是食物的名字。我会试试这个,会让你知道的。谢谢在实施此更改之前,请查看并了解ViewData的工作原理!