私は使用できた
@Html.HiddenFor(x=> ViewData["crn"])
しかし、私は得る、
<input id="ViewData_crn_" name="ViewData[crn]" type="hidden" value="500" />
どういうわけかその問題を回避するには(id=ViewData_crn_ and name=ViewData[crn]
)、次のことを試みましたが、「値」属性が設定されていません。
@Html.HiddenFor(x => x.CRN, new { @value="1"})
@Html.HiddenFor(x => x.CRN, new { @Value="1"})
生成する
<input id="CRN" name="CRN" type="hidden" value="" />
<input Value="500" id="CRN" name="CRN" type="hidden" value="" />
私は何か間違っていますか?ありがとう
ViewDataの代わりにビューモデルを使用してみましたか? For
で終わり、ラムダ式をとる強く型付けされたヘルパーは、ViewData
などの弱い型付けの構造では機能しません。
個人的には、ViewData/ViewBagは使用しません。ビューモデルを定義し、コントローラーアクションがそれらのビューモデルをビューに渡すようにします。
たとえば、あなたの場合、ビューモデルを定義します。
public class MyViewModel
{
[HiddenInput(DisplayValue = false)]
public string CRN { get; set; }
}
コントローラーアクションにこのビューモデルを設定させます。
public ActionResult Index()
{
var model = new MyViewModel
{
CRN = "foo bar"
};
return View(model);
}
次に、強く型付けされたビューにEditorFor
ヘルパーを使用させます。
@model MyViewModel
@Html.EditorFor(x => x.CRN)
私を生成します:
<input id="CRN" name="CRN" type="hidden" value="foo bar" />
結果のHTMLで。
以下はMVC 4で動作します
@Html.HiddenFor(x => x.CRN, new { @Value = "1" });
@Valueプロパティでは大文字と小文字が区別されます。 @ Valueに大文字の「V」が必要です。
こちらが私のモデルです
public int CRN { get; set; }
ブラウザで見るとhtmlで出力されるものはここにあります
<input value="1" data-val="true" data-val-number="The field CRN must be a number." data-val-required="The CRN field is required." id="CRN" name="CRN" type="hidden" value="1"/>
ここに私の方法があります
[HttpPost]
public ActionResult MyMethod(MyViewModel viewModel)
{
int crn = viewModel.CRN;
}
もっと簡単な解決策があると思います。 Html.Hidden
の代わりにHtml.HiddenFor
を使用する必要があります。見て:
@Html.Hidden("CRN", ViewData["crn"]);
これにより、type="hidden"
およびid="CRN"
を含むname="CRN"
のINPUT
タグと、value
属性内の正しい値が作成されます。
それが役に立てば幸い!
@ Html.HiddenForの2番目のパラメーターは、フィールドに一致するルートまたはモデルデータが見つからない場合にのみ値を設定するために使用されることに注意してください。ダリンは正しい、ビューモデルを使用します。