0

Razor を使用してフォームの非表示フィールドに入力した値がいくつかあります。context.ttフォームを送信すると、Entity Frameworkが特定のフィールドのモデルで作成した検証に合格しません。送信すると、フィールドを null にすることはできないというエラーがスローされます。これにより、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="" />

inputwith idLoanStatusに値が設定されているのに、null にできないというエラーがスローされているのはなぜだろうと思っています。スローされる例外は次のとおりです。

System.Data.ConstraintException このプロパティを null 値に設定することはできません。

HTML で値を設定するには、ViewBag を使用してコントローラーで設定しますViewBag.LoanStatus = "Not Complete";。次にcshtmlファイルで@Html.HiddenFor(model => model.LoanStatus, new { @Value = ViewBag.LoanStatus })

MVC と Entity Framework は初めてです。

編集 - 追加のコード その他の隠し要素

@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

<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="" />

.cshtmlファイルからの Htmlヘルパー行のない編集コード<input type="hidden" name="LoanStatus" id="LoanStatus" data-val="true" value="@ViewBag.LoanStatus" />

HTMLソースからの行 <input type="hidden" name="LoanStatus" id="LoanStatus" data-val="true" value="Not Complete" />

4

2 に答える 2

3

@Html.HiddenFor入力に値を使用する場合、モデルオブジェクトから読み取られます。属性の値を指定して上書きしようとしValueます。これは機能しないと思います。ご覧のとおり、空の値属性を取得します。

問題を解決するには、ビューバッグを使用せずに、次のように値がビューに設定されたモデルオブジェクトを渡します。

コントローラ:

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

意見:

@Html.HiddenFor(m => m.LoanStatus)
于 2012-12-12T15:29:16.847 に答える
0

ここで Html ヘルパーを使用する代わりに、次のように手動で行を作成してみませんか。

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

各行の値が 2 か所に設定されている理由はまだわかりません。もっとコードを投稿できますか?

編集:小文字の値がコントローラーに返されていると思います。代わりに @value (小文字の v) を使用してみて、問題が解決するかどうかを確認してください。

于 2012-12-12T14:55:20.217 に答える