【发布时间】:2023-03-05 01:51:01
【问题描述】:
提交表单时的文本框值在控制器中为空。我所拥有的简化结构如下:
型号
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"/>
}
}
控制器
public ActionResult UpdateObject(MyObject myObject)
{
// Do Stuff...
}
如果我在控制器方法中放置断点,然后检查 myObject 的属性值,则 DecimalProperty 为空。我正在使用的实际对象上还有其他属性,这些属性很好,但由于某种原因,这个属性不是。我没有发现任何暗示必须以不同于 DateTime 或字符串的方式处理小数的内容。我也试过手动写出输入的html:
<input type="text" name="@(String.Format("Model[{0}].DecimalProperty", i))" value="@Model[i].DecimalProperty" />
为了安全起见,我已经设置了文本框的 name 和 id 属性。关于我提交表单时为什么我的文本框值为空的任何想法?
设置 [HttpPost] 属性没有帮助。
【问题讨论】:
-
您看到有一个模型列表,这是为什么呢?如果您在视图上有一个枚举器,但在操作上只有一个对象,我不确定模型绑定器是否会弄清楚该怎么做。
-
在视图上我的模型是一个对象列表。视图上还有多种形式(每个对象一个)。 Model[i] 表示模型中的特定元素。
-
将其编辑到视图代码块中。
-
试试“十进制?”您必须考虑可能的 null 值。
-
但是如果我在文本框中输入了一个值,那么当我提交表单时它在控制器中不应该为空。但是,是的,该属性实际上是一个小数?我将进行编辑以反映这一点。