web-dev-qa-db-ja.com

Html.HiddenFor valueプロパティが設定されていません

私は使用できた

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

私は何か間違っていますか?ありがとう

27
Sekhar

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で。

38
Darin Dimitrov

以下は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;
}
53
Gudradain

もっと簡単な解決策があると思います。 Html.Hiddenの代わりにHtml.HiddenForを使用する必要があります。見て:

@Html.Hidden("CRN", ViewData["crn"]);

これにより、type="hidden"およびid="CRN"を含むname="CRN"INPUTタグと、value属性内の正しい値が作成されます。

それが役に立てば幸い!

5
Marcio Paulo

@ Html.HiddenForの2番目のパラメーターは、フィールドに一致するルートまたはモデルデータが見つからない場合にのみ値を設定するために使用されることに注意してください。ダリンは正しい、ビューモデルを使用します。

3
RickAndMSFT