我正在尝试使用以下命令将值分配给java脚本中的隐藏字段 JavaScript变量,然后尝试将其传递回控制器。每次我进入模型属性DBErrorID的post方法时,该值为0。
剃刀视图:
<body>
@Html.HiddenFor(model => model.DBErrorID, new { id = "DBErrorId" })
<input type="submit" value="Update" class="btn btn-success" onclick="GetValue()" />
</body>
JavaScript:
<script language="javascript" type="text/javascript">
function GetValue() {
$("#DBErrorId").val(totalValues);
// alert(totalValues);
}
<script>
控制器:
[HttpPost]
public ActionResult ErrorStatusView(Models.ErrorStatusModel obj)
{
Models.ErrorStatusModel objreg = new Models.ErrorStatusModel();
objreg.DBErrorID = obj.DBErrorID;
}
答案 0 :(得分:0)
您当前的服务器端代码正在创建ErrorStatusModel
不必要的新对象作为第一行,这将创建一个具有默认值的新对象(objreg
变量)(除非您将其设置为构造函数),对于int
类型的属性,它将为0
。如果要检查objreg
的值,这就是将0
视为属性值的原因。
您不需要创建此附加对象。 当您使用ErrorStatusModel
方法参数类型时,模型绑定程序框架将为您创建一个并映射发布的值。这意味着您的obj
属性已由表单数据正确填充(假设DBErrorID
属性是可设置的)
[HttpPost]
public ActionResult ErrorStatusView(Models.ErrorStatusModel obj)
{
// obj is populated with form values.
// use obj
// return something.
}
此外,您的客户端代码正在尝试在GetValue
方法内设置隐藏输入的值,该方法在Submit按钮的onclick
事件上被调用。如果您使用的是普通表单提交,并且您的按钮位于表单标签内,则当用户单击“提交”按钮时,它将立即提交表单(具有该输入的当前值)
在这种情况下,应避免单击按钮时发生默认行为(提交表单),将值设置为Needed并通过JavaScript触发表单提交。
有多种方法可以做到这一点。这是一种方法(不引人注目的JavaScript方法),它假定您已将jQuery加载到页面上。给按钮添加一个Id
,我们可以使用它来连接click事件。
<input type="button" value="Update" class="btn btn-success"
id="btn-save" />
现在使用JavaScript,监听此按钮上的click事件,阻止正常行为(提交表单),更新隐藏的输入值并触发表单提交。
$(function () {
$('#btn-save').click(function (e) {
e.preventDefault();
$("#DBErrorId").val(34);
$(this).closest("form").submit();
});
})
此外,您不应该在服务器中创建新对象