隐藏字段中的值未传递给EF上下文模型

时间:2012-12-12 14:39:50

标签: c# .net asp.net-mvc-3 entity-framework-4

我有一些使用Razor放入表单的隐藏字段的值。当我提交表单时,它不会通过实体框架在某个字段的context.tt模型中创建的验证。当我提交时,会抛出一个错误,指出该字段不能为空。这让我相信HTML中的值为null。当我检查来源时,这就是我发现的:

<input Value="1" data-val="true" data-val-number="The field PoolType must be a number." id="PoolType" name="PoolType" type="hidden" value="" />
<input Value="Not Complete" id="LoanStatus" name="LoanStatus" type="hidden" value="" />
<input Value="2012-12-12 09:26.39" data-val="true" data-val-required="The DateStamp field is required." id="DateStamp" name="DateStamp" type="hidden" value="" />

我想知道为什么身份input的{​​{1}}有一个值集,但是它会抛出一个错误,说它不能为空。抛出的异常是:

  

System.Data.ConstraintException此属性不能设置为空值。

要在HTML中设置值,我使用ViewBag LoanStatus在控制器中设置它。然后在cshtml文件ViewBag.LoanStatus = "Not Complete";

我是否缺少某些东西,我是MVC和实体框架的新手。

编辑 - 附加代码 更多隐藏元素

@Html.HiddenFor(model => model.LoanStatus, new { @Value = ViewBag.LoanStatus })

生成的html

@Html.HiddenFor(model => model.ID, new{ @Value = ViewBag.ID })
        @Html.HiddenFor(model => model.Reason, new{ @Value = ViewBag.Reason })
        @Html.HiddenFor(model => model.PoolType, new{ @Value = ViewBag.PoolType })
        @Html.HiddenFor(model => model.LoanStatus, new{ @Value = ViewBag.LoanStatus })
        @Html.HiddenFor(model => model.DateStamp, new{ @Value = ViewBag.DateTime })

没有Html帮助程序的EDIT代码 来自.cshtml文件的行 <input Value="55" data-val="true" data-val-number="The field ID must be a number." data-val-required="The ID field is required." id="ID" name="ID" type="hidden" value="" /> <input Value="1" data-val="true" data-val-number="The field Reason must be a number." id="Reason" name="Reason" type="hidden" value="" /> <input Value="1" data-val="true" data-val-number="The field PoolType must be a number." id="PoolType" name="PoolType" type="hidden" value="" /> <input Value="Not Complete" id="LoanStatus" name="LoanStatus" type="hidden" value="" /> <input Value="2012-12-12 10:00.46" data-val="true" data-val-required="The DateStamp field is required." id="DateStamp" name="DateStamp" type="hidden" value="" />

来自html源代码 <input type="hidden" name="LoanStatus" id="LoanStatus" data-val="true" value="@ViewBag.LoanStatus" />

2 个答案:

答案 0 :(得分:3)

使用@Html.HiddenFor时,将从模型对象中读取输入值。您尝试通过指定Value属性的值来覆盖它。我想这不起作用,如你所见,你得到空值属性。

要解决您的问题,请不要使用viewbag,而是传递一个模型对象,并将值设置为您的视图,如下所示:

<强>控制器:

return View(new YourModel { LoanStatus = "Not Complete" });

查看:

@Html.HiddenFor(m => m.LoanStatus)

答案 1 :(得分:0)

不要在这里使用Html助手,为什么不尝试按如下方式手动制作线:

<input type="hidden" name="LoanStatus" value="@ViewBag.LoanStatus"/>

我仍然不知道为什么你的每一行都在2个地方设置了值。你能发布更多代码吗?

编辑:我认为小写的值会传回你的控制器。尝试使用@value(小写v),看看是否修复了它。