1

フォームが null モデルを返していません。

詳細ページで特定のモデルの詳細を表示していて、ユーザーが SubmitPost ボタンを押すと、ビューはモデルを返す必要があります。

意見

@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になる理由についての手がかりはありますか?

4

3 に答える 3

1

MyModel提供されたサンプルに基づくと、フォームに のフィールドが含まれていないようです。テストとして、非表示のフィールドを含めるか、使用@Html.HiddenFor(model => model.CourseID)して、値が投稿されているかどうかを確認してください。

于 2012-04-24T17:16:24.167 に答える
0

DisplayForHTMLヘルパーは、通常、プロパティ値を表す文字列を返すだけです。プロパティがブール型の場合、無効なチェックボックスとしてレンダリングされます。入力コントロールがない限り、値を取得することはできません。したがって、この場合は、@Html.HiddenForHTMLヘルパーメソッドを使用するだけです。

HTML.HiddenForヘルパーメソッドは、式と同じIDと名前で非表示にされたタイプの入力要素のHTMマークアップを生成します

@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の値がHTTPPostアクションメソッドで使用できるようになります。

于 2012-04-24T17:37:58.197 に答える
0

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

のように見えるように、css でスタイル設定された読み取り専用の入力要素を使用することをお勧めしますdiv.display-field

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

ページの他のスタイルによっては、入力を div で囲む必要がある場合と必要でない場合があります。

于 2012-04-24T17:33:41.427 に答える