据我所知,模型绑定器将迭代一个操作方法的所有原始参数,然后它将参数的名称与输入数据中的每个键(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
将与哪个属性进行比较?名称或价值?
答案 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
功能。在任何一种情况下,都不会发布此按钮的值,因此没有任何一个名称。