3

MVC4 では検証属性を使用してこのタスクを実行していることに気付きました。しかし、私は別の状況に対処していることを知っています。

これがモデルです。その中にコレクション プロパティがありChoices(これには常に 5 つの要素があります) CorectChoice、コレクションから選択されたインデックスはどこにありますか。

public class MultipleChoiceQuestionTemplate : QuestionTemplate
{
    public MultipleChoiceQuestionTemplate() { ... }

    [DisplayName("Question")]
    public string QuestionText { get; set; }
    public List<string> Choices { get; set; }

    [DisplayName("Correct Choice")]
    public int CorrectChoice { get; set; }
}

これがビューです。プレゼンテーションをご覧ください。

ここに画像の説明を入力

    <div id="choices">
    @for (int i = 0; i < Model.Choices5.Count; i++) {
        <div class="choice-container" style="display: block;">
        @Html.TextBoxFor(model => model.Choices5[i])
        @Html.RadioButtonFor(model => model.CorrectChoice, i)
        </div>
    }   
    </div>

ユーザーは入力に空の文字列を残すことができることに注意してください (type="text")。選択したインデックス (ラジオボタン) に文字列が必要であることを検証する必要があります。

フォームに送信する前に検証するにはどうすればよいですか?

4

2 に答える 2

1

クライアント側でこれが必要なため、カスタムロジックに IClientValidateable が必要になるか、サーバー側のみの IvalidateableObject ではなく、独自の手動検証を記述します。ただし、最初に試すことは、検証エラーを適切に配置することで非常に簡単に解決できる可能性がある、ここでの Darin の回答です。

HtmlHelper クラスを使用すると、MVC ラジオ ボタン リストがグループ化されない

それが機能しない場合、少なくとも知っておくべき別のオプションは IClientValidateable ASP.NET MVC でカスタム バリデータを実装し、IClientValidatable を使用します。

上記の最初のリンクの Darin のソリューションが何らかの理由で機能しない場合は、そうすべきだと思います)

  1. フォームの投稿をインターセプトし、ラジオ ボタンをクエリして、いずれかが選択されていることを確認するだけです。理論的には複数のラジオ ボタン タイプを使用できるため、セレクターを使用してフォームの一部を確保したり、クラス タイプを含めたりすることができます。Darin の解決策が機能しない場合はお知らせください。サポートが必要な場合は、この解決策を提供します。

  2. ラジオ ボタンで目立たない検証を使用します。ただし、リストの最初のものだけがエラーになります。css クラスで少し魔法を回避する必要がありますが、解決策は次のとおりです: ASP.NET MVC 3 unobtrusive validation and radio buttons

于 2013-03-02T04:24:22.843 に答える
0

インターフェイスIValidatableObjectを実装する必要があります。この記事を確認して、例を参照してくださいhttp://msdn.microsoft.com/en-us/vs2010trainingcourse_aspnetmvccustomvalidation_topic4

于 2013-03-02T00:50:44.883 に答える