提交表单时的文本框值在控制器中为null。我所拥有的简化结构如下:
MODEL
public class MyObject
{
public decimal? DecimalProperty { get; set; }
}
查看
@model List<MyObject>
@for(var i = 0; i < Model.Count; i++)
{
using (Html.BeginForm("UpdateObject", "MyController", FormMethod.Post))
{
@Html.Textbox(String.Format("Model[{0}].DecimalProperty", i), Model[i].DecimalProperty)
<input type="submit" value="Update"/>
}
}
CONTROLLER
public ActionResult UpdateObject(MyObject myObject)
{
// Do Stuff...
}
如果我在控制器方法中放置一个断点,然后检查myObject的属性值,则DecimalProperty为null。我正在使用的实际对象还有其他属性,但是由于某种原因,这个属性不是。我没有发现任何暗示小数必须以不同于DateTime或字符串的方式处理的内容。我也尝试用手写出输入的html:
<input type="text" name="@(String.Format("Model[{0}].DecimalProperty", i))" value="@Model[i].DecimalProperty" />
我已将文本框的名称和 id 属性设置为安全。提交表单时,为什么我的文本框值为null的任何想法?
设置[HttpPost]属性没有帮助。
答案 0 :(得分:2)
问题在于你的行动签名。 您应该将其更改为接受整个模型列表,或将Html.TextBox的Name属性更改为等于MyObject的属性名称,因为默认MVC绑定器无法正确映射它。
所以,第一个选项:
public ActionResult UpdateObject(List<MyObject> myObject)
{
// Do Stuff...
}
第二个选项:
@Html.Textbox("DecimalProperty", Model[i].DecimalProperty)