MVC模型绑定器:哪个<input />属性与action方法的输入参数进行比较?

时间:2016-09-23 12:15:44

标签: asp.net-mvc

据我所知,模型绑定器将迭代一个操作方法的所有原始参数,然后它将参数的名称与输入数据中的每个键(http post数据)进行比较。找到匹配后,相应的输入数据将分配给参数。

现在我的问题是所有<input>属性值(名称,值)中哪一个被比较并分配给方法参数?

查看:

<input type="submit" name="BtnSave" value="Save Employee" />
<input type="button" name="BtnReset" value="Reset" onclick="ResetForm();"/>
<input type="submit" name="BtnCancel" value="Cancel" />

控制器:

public ActionResult SaveEmployee(Employee employee, string BtnSubmit)
    {
        switch (BtnSubmit)
        {
            case "Save Employee":
                return Content (employee.EmployeeName + "," + " " + employee.Designation + "," + " " + employee.DateOfBirth);

            case "Cancel":
                return RedirectToAction("EmployeeForm");
        }
        return View();
    }

现在BtnSubmit将与哪个属性进行比较?名称或价值?

1 个答案:

答案 0 :(得分:0)

无论HTML控件类型如何,name属性始终确定模型绑定器将绑定到哪个属性或操作参数,value属性始终是属性或操作参数的值。设置为。

但是,在这里,您有一个名为BtnSubmit的操作参数,并且您的HTML中没有具有相同名称的实际输入。因此,该值始终为null,因为这是string类型的默认值。

可能,你在这里寻找的更像是:

<input type="submit" name="BtnSubmit" value="Save Employee" />
<input type="button" name="BtnReset" value="Reset" onclick="ResetForm();"/>
<input type="submit" name="BtnSubmit" value="Cancel" />

请注意,“submit”类型的两个输入都具有相同的name属性,并且该名称与您的操作参数匹配。通过这种方式,它们就像收音机一样。无论点击哪一个都会实际发布其价值。换句话说,如果用户点击的内容为Save Employee,那么您的操作中BtnSubmit的值将为Save Employee。否则,如果单击另一个,则值为Cancel

此外,FWIW,实际上是reset类型,因此您的重置按钮应为type="reset",而不是type="button"。您可能在那时甚至不需要JavaScript ResetForm功能。在任何一种情况下,都不会发布此按钮的值,因此没有任何一个名称。