我正在尝试使用 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;
}
您当前的服务器端代码正在创建一个不必要的新对象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.
}
此外,客户端代码正在尝试在提交按钮的onclick
事件调用的GetValue
方法中设置隐藏输入的值。如果您使用的是普通表单提交,并且您的按钮位于表单标签内,则当用户单击提交按钮时,它将立即提交表单(使用该输入的当前值(
如果是这种情况,您应该在单击按钮时阻止默认行为(提交表单(,根据需要设置值并通过 JavaScript 触发表单提交。
有多种方法可以做到这一点。这里有一种方法 - 不显眼的JavaScript方法 - 假设你已经将jQuery加载到你的页面。给按钮一个Id
,我们可以用它来连接点击事件。
<input type="button" value="Update" class="btn btn-success"
id="btn-save" />
现在在 JavaScript 中,侦听此按钮上的单击事件,阻止正常行为(提交表单(,更新隐藏的输入值并触发表单提交。
$(function () {
$('#btn-save').click(function (e) {
e.preventDefault();
$("#DBErrorId").val(34);
$(this).closest("form").submit();
});
})
此外,您不应该在服务器中创建新对象