MVC-无法使用隐藏字段将值传递回控制器

时间:2018-08-23 14:55:34

标签: asp.net-mvc razor asp.net-mvc-controller

我正在尝试使用以下命令将值分配给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; 
}

1 个答案:

答案 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();
    });

})

此外,您不应该在服务器中创建新对象