2012-04-24 10 views
1

私のフォームはnullモデルを返していません。モデルの詳細を表示し、null値を返すフォームからモデルを返そうとしています

[詳細]ページで特定のモデルの詳細を表示しているときに、ユーザーが[送信後]ボタンを押すと、ビューでモデルが返されます。

ビュー

@model MyApp.Models.MyModel 
@using (Html.BeginForm("ApplyUsingDetails", "Controller", FormMethod.Post)) 
{ 
    <fieldset> 
     <legend>Course</legend> 
     <div class="display-label">MyModel ID</div> 
     <div class="display-field"> 
      @Html.DisplayFor(model => model.CourseID) 
     </div> 

     <div class="display-label">Title</div> 
     <div class="display-field"> 
      @Html.DisplayFor(model => model.Title) 
     </div> 
     etc. . . 

     <p><input type="submit" value="SubmitPost" /></p> 

     <more misc information for the view> 
    </fieldset> 
} 

いくつかのコンテキストを与えるために行動

[HttpPost] 
public ActionResult ApplyUsingDetails(MyModel model) 
{ 
// when I try to access model here it comes up null 
} 

:私は、学生がクラスの詳細を表示し、その後に適用できるようにするには、このフォームを使用していますボタンのクリックでクラス

私のモデルがnullになる理由についての手掛かりはありますか?

答えて

1

入力したサンプルに基づいて、MyModelのフィールドがフォームに含まれているように見えません。テストとして、隠しフィールドを含めるか、@Html.HiddenFor(model => model.CourseID)を使用して、値が投稿されているかどうか確認してください。

+0

隠し値は、表示されたページのソースに適切な値を返しますが、まだnullを返します。@ Html.HiddenForを配置する特定の場所があります。 。 。それを動作させるには? – Ecnalyr

+1

'@ using'セクションの中には、少なくとも値を掲示しているかどうかを確認するのに十分なはずです。 –

+0

私はここで物事を手に入れた後に働き始めた - 答えのようです。 – Ecnalyr

0

フォームに入力要素を含めて、コントローラに投稿してコントローラのモデルにバインドできるようにする必要があります。 ASP.NetのモデルバインディングMVCは、送信したフォーム値を使用して、同じ名前のコントローラーのモデルでプロパティーを検索し、フォーム値でプロパティーを設定しようとします。フォーム内の入力フィールドは、Model Bindingがコントローラーのモデルに固執することを意味しません。

のように見えるように、CSSでスタイル付けされた読み取り専用入力要素を使用することをお勧めします。

<div class="display-label">Course ID</div> 
    <div> 
     @Html.TextBoxFor(model=>model.CourseID, new{readonly="readonly", @class="display-field"}) 
    </div> 

divの入力をページ上の他のスタイルに応じて折り返す必要はありません。

0

DisplayFor HTMLヘルパーは、通常はプロパティ値を表す文字列を返します。プロパティがブール型の場合、無効なチェックボックスとして表示されます。あなたが入力コントロールを持っていない限り、あなたは価値を得ることができません。この場合、単に@Html.HiddenFor HTMLヘルパーメソッドを使用することができます。

HTML.HiddenForヘルパーメソッドは、あなたのHTTPPostアクションメソッドで表現今

@using (Html.BeginForm("ApplyUsingDetails", "Controller", FormMethod.Post)) 
{ 
    <div class="display-label">MyModel ID</div> 
    <div class="display-field"> 
     @Html.DisplayFor(model => model.CourseID) 
     @Html.HiddenFor(m=>m.CourseId) 
    </div> 
    <input type="submit" value="Save" /> 
} 

コースIDの値が利用可能になると、IDと同じ名前で隠されたタイプのinput要素のためのHTMマークアップを生成します。

関連する問題