2011-09-09 14 views
4

私の隠されたフィールドの値が、私が期待していたものとは異なる理由を理解しようと1時間を費やしました。最後の溝の努力として、私はそれを隠しフィールドに切り替え、私が期待していたようにレンダリングを開始しました。なぜそれが起こるのですか?入力タイプ= "非表示" vs htmlhelper奇妙な問題

コンテキストによっては、htmlhelperを使用しているIDがクエリーストリングIDパラメータのIDと同じものであることがあります。

// renders 456 
@using (Html.BeginForm()){ 
     @Html.Hidden("id", Model.ID) 
} 

答えて

1

// renders 123 
    @using (Html.BeginForm()){ 
     <input type="hidden" name="id" value="@Model.ID" /> 
    } 

私は、これはMVCの命名規則の一部であると考えています。私のモデルのプロパティの1つが「タイトル」であり、ViewBag.Titleと競合しているため、これが私に起こりました。実際のモデルのタイトルの代わりにViewBag.Titleを表示し始めました。

これは、HtmlHelperで明示的に "Model.ID"と指定した場合にのみ発生します。プロパティー名 "ID"を調べ、ViewContextを調べ、照会ストリング "ID"を見つけて使用します。

HtmlHelperを使用しないクエリ文字列 "ID"は、その名前を見つけるためにViewContextを調べないため、使用しません。それは、モデルからの値が何であれだけを置きます。 HtmlHelpersは一般にViewContextを見て、正確にどこから来たかではなく、Property Nameに基づいて使用する値を特定します。

あなたはHtmlHelperのを使用したい場合は、これを試してみて、それが何を参照してください。

@Html.HiddenFor(model => model.ID)