1

私の人生では、この単純なコードが機能しない理由を理解できません。ここにはこのような質問がたくさんあることを知っており、それらすべてを試しましたが、うまくいきません!

私のコントローラー:

 //validate email
            if (studentlist.StudentLiveId == null || !studentlist.StudentLiveId.Contains("@"))
            {
                ModelState.AddModelError("StudentLiveId", "Please enter a valid email id");
                return View(studentlist);
            }

私の見解 - 関連するビット:

@using (Html.BeginForm())
{

    @Html.ValidationSummary(true)

    <fieldset>
        <p style="font-weight: bold; font-size: large; color: red">
            hELLO
        </p>
        <div class="editor-field">
            @Html.ValidationMessageFor(model => model.StudentLiveId)
        </div>

エラー:

liveid フィールドを null のままにしておくと、エラーを表示して停止する代わりに、Live Id 検証フィールドをスキップして、モデル内の他のドロップダウン フィールドに移動し、Object reference not set to instance of an object エラーをスローします!

関連するフィールドの横ではなく、別の一般的な場所に検証エラーを出力しているだけです。ビューがエラーをスローしてそれ以上の読み込みを停止し、ドロップダウンに移動してランダムなエラーを表示しないことを期待しています。ここで何が問題なのですか?

4

1 に答える 1

0

ModelStateエラーがあるかどうかに関係なく、モデルが処理されてビューにバインドされるため、残念ながら期待は正しくありません。

DropDownListnull 参照エラーが発生した場合は、通常、何らかのコレクションを、null コレクションに対するガードを持たない やその他のヘルパーに再バインドしようとしていることを意味します。

何らかの入力にバインドされていないものは、フォームを投稿しても保持されないことを覚えておく必要があります。直観に反するように見えることもありますが、ドロップダウンリストにバインドされた値は「選択された」値であり、<select>要素に入力するために使用されるアイテムのコレクションではありません。したがって、最初のアクションにモデルのIEnumerableList、またはSelectList(など) を構築するロジックが含まれている場合は、ビューを返す前にポスト アクションでそのロジックを繰り返す必要があります。

于 2014-03-28T05:31:03.233 に答える