在ASP.Net中提交表单时,十进制值的文本框为null?

时间:2015-08-04 14:17:52

标签: c# asp.net forms razor

提交表单时的文本框值在控制器中为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]属性没有帮助。

1 个答案:

答案 0 :(得分:2)

问题在于你的行动签名。 您应该将其更改为接受整个模型列表,或将Html.TextBox的Name属性更改为等于MyObject的属性名称,因为默认MVC绑定器无法正确映射它。

所以,第一个选项:

public ActionResult UpdateObject(List<MyObject> myObject)
{
   // Do Stuff...
}

第二个选项:

@Html.Textbox("DecimalProperty", Model[i].DecimalProperty)