所以我有四个单选按钮,它们绑定(bind)到我的模型的一个属性,它们都具有不同的值。但是,当表单提交时,该属性返回 null(而其他所有内容都正确返回)。代码:
<div id="RadioButtonGroup">
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="A" type="radio" name="optradio" >Option One
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="B" type="radio" name="optradio" >Option Two
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="C" type="radio" name="optradio" >Option Three
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="D" type="radio" name="optradio" >Option Four
</label>
</div>
我选择一个,提交表单,Object.PropertyOne
返回 null。但是,如果我在我的 ViewModel 中手动设置 Object.PropertyOne
,它会正确显示。我错过了什么?
最佳答案
不要手动为单选按钮指定名称
。如果你删除 name="optradio"
你会看到标签助手会发出一个名字。如果您指定自己的名称,Model Binder 将无法正确处理您的属性。
您可以通过添加第二个属性 PropertyTwo
并查看源代码和调试 Controller 来查看实际效果。您会发现 PropertyTwo
的每个单选按钮的名称都是 Object_PropertyTwo
,并且它将正确绑定(bind)(而 Object.PropertyOne
仍然无法绑定(bind)绑定(bind)):
型号
public class MyObject
{
public string PropertyOne { get; set; }
public string PropertyTwo { get; set; }
}
public class MyModel
{
public MyObject Object { get; set; }
}
Controller
public ActionResult Foo()
{
return View(new MyModel() { Object = new MyObject() });
}
[HttpPost]
public ActionResult Foo(MyModel model)
{
return View();
}
查看
@{
ViewData["Title"] = "Test Page";
}
@model MyModel
<form asp-controller="Home" asp-action="Foo" method="post">
<div id="RadioButtonGroup">
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="A" type="radio" name="optradio" >Option One
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="B" type="radio" name="optradio" >Option Two
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="C" type="radio" name="optradio" >Option Three
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="D" type="radio" name="optradio" >Option Four
</label>
</div>
<div id="RadioButtonGroup">
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyTwo" value="A" type="radio">Option One
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyTwo" value="B" type="radio">Option Two
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyTwo" value="C" type="radio">Option Three
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyTwo" value="D" type="radio">Option Four
</label>
</div>
<input type="submit" />
</form>
关于c# - 单选按钮上的模型绑定(bind)为该属性返回 null (ASP.NET Core),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36870942/