![](/img/trans.png)
[英]Why is ASP.NET submitting the original value of a TextBox control when the contents have been changed?
[英]Textbox for Decimal value null when submitting form in ASP.Net?
提交表单时的文本框值在控制器中为空。 我所拥有的简化结构如下:
模型
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]属性没有帮助。
问题出在你的行动签名中。 您应该将其更改为接受整个模型列表,或将Html.TextBox的Name属性更改为等于MyObject的属性名,导致默认MVC绑定器无法正确映射它。
所以,第一个选项:
public ActionResult UpdateObject(List<MyObject> myObject)
{
// Do Stuff...
}
第二种选择:
@Html.Textbox("DecimalProperty", Model[i].DecimalProperty)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.