Daa*_*ath 5 c# asp.net model-binding razor asp.net-core
所以我有四个单选按钮绑定到我的模型属性之一,所有属性都具有不同的值.但是,当表单提交时,该属性返回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>
Run Code Online (Sandbox Code Playgroud)
我选择一个,提交表单,然后Object.PropertyOne返回null.但是,如果我Object.PropertyOne在ViewModel中手动设置,它会正确显示.我错过了什么?
ste*_*kil 11
不要name手动指定单选按钮.如果删除,name="optradio"您将看到标记助手将发出一个名称.如果您指定自己的名称,Model Binder将无法正确处理您的财产.
您可以通过添加第二个属性PropertyTwo并查看源代码并调试控制器来查看此操作.您会发现每个单选按钮PropertyTwo都有一个名称Object_PropertyTwo,并且它将正确绑定(Object.PropertyOne但仍然无法绑定):
模型
public class MyObject
{
public string PropertyOne { get; set; }
public string PropertyTwo { get; set; }
}
public class MyModel
{
public MyObject Object { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
调节器
public ActionResult Foo()
{
return View(new MyModel() { Object = new MyObject() });
}
[HttpPost]
public ActionResult Foo(MyModel model)
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
视图
@{
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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4943 次 |
| 最近记录: |