0

如何使用 Razor 更改隐藏字段的值,然后调用 JavaScript 函数 alert("hello") onchange 事件。

由于某种原因,下面的代码不起作用......

<input id="trigger" name="trigger" type="hidden"  value="6" onchange="alert("hello") />

@{  
 var hiddenfieldvalue = @Html.Hidden("trigger", "5"); // it would be better to retrieve the value at first which is 6, rather than assigning it to 5.

 // the code below should cause the hidden field value to change, which will then call alert("hello")

    if(hiddenfieldvalue.ToString() == "2")
        @Html.Hidden("value","3");
    else
        @Html.Hidden("value", "2");


}

 <!DOCTYPE html>
 <html lang="en">
 <head>
   <title>Add Numbers</title>
   <meta charset="utf-8" />
   <style type="text/css">
     body {background-color: beige; font-family: Verdana, Arial;
        margin: 50px; }
     form {padding: 10px; border-style: solid; width: 250px;}
   </style>
 </head>
<body> </body>
</html>
4

1 回答 1

2

您在这里似乎有几个误解。

首先,razor 代码运行到服务器端完成,最终呈现的页面被传递到浏览器,然后浏览器运行 javascript 代码——除了 razor 代码输出的 javascript 的任何部分之外,两者之间没有交互。

Html.Hidden()为隐藏的表单字段写出 HTML - 在任何时候它的 .ToString() 都不会评估为值。@此外,如果在您拥有该行的位置以它为前缀输出,则您的代码将始终在 DOCTYPE 行之前value输出具有名称和值的隐藏字段的 HTML ,因为 if 永远不会匹配并位于 DOCTYPE 之前. 您可能希望将它移动到当前不存在的标签中,尽管我建议您使用它来生成它并将处理隐藏字段的代码放在其中。2 <form>@using (Html.BeginForm()) { ... }

如果您希望检测 razor 的变化,则可以使用该检查来包围 javascript 代码的输出以触发 alert()。因此,要么没有变化,因此代码永远不会成为呈现页面的一部分,要么有变化并且代码被输出,并在页面到达浏览器后运行(假设客户端没有禁用 javascript)。

于 2013-05-06T04:55:52.017 回答