1

検索を開始するために使用される 3 つのフィールドがあり、そのうちの 2 つを空にすることができますが、ユーザーが何かを入力したことを確認する必要があります。

だから、FirstName、LastName、および ID 番号があります。ユーザーはこれらのフィールドのいずれか 1 つ、2 つ、または 3 つを検索できるはずですが、何も入力せずに [送信] をクリックした場合はトラップしたいと考えています。

私は .NET にかなり慣れていませんが、これはカスタム検証を作成することを意味すると言えます。検証属性は、それ自体では十分ではないようです。

それは行く方法ですか?そうである場合、または他のアプローチの方が優れている場合、誰かが親切にガイダンスを提供できますか?

4

3 に答える 3

2

検索モデルに IValidatableObject インターフェイスを実装できます。

例:

public class SearchModel: IValidatableObject
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }
    public string Field3 { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (string.IsNullOrWhitespace(Field1) && string.IsNullOrWhitespace(Field2) && string.IsNullOrWhitespace(Field3))
            yield return new ValidationResult(("At least one field required.", new[] { "Field1", "Field2", "Field3" })

    }
}

次に、コントローラーで:

[HttpPost]
public ActionResult Search(SearchModel searchModel)
{
   if (ModelState.IsValid)
   {
      //Search
   }
   else
   {
       return View(searchModel);
   }
}

次に、あなたの見解で:

@model SearchModel

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <fieldset>

        <div class="editor-label">
            @Html.LabelFor(model => model.Field1)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Field1)
            @Html.ValidationMessageFor(model => model.Field1)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Field2)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Field2)
            @Html.ValidationMessageFor(model => model.Field2)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Field3)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Field3)
            @Html.ValidationMessageFor(model => model.Field3)
        </div>

        <p>
            <input type="submit" value="Search" />
        </p>
    </fieldset>
}
于 2013-03-12T21:52:29.260 に答える
0

フィールドが送信される前にフィールドが有効であることを本質的に検証しようとしていますが、それは非常に可能です。Event Handlerこれらのコンポーネントへの変更を処理するために独自のものを構築できNotifierます。ボタンで処理できます。

このような偉業を実装する方法はたくさんあります。概念的な概念に慣れるための非常にシンプルで基本的な方法は、エラー プロバイダーです。

このコンポーネントはツールボックスにあり、フォームにドラッグするだけです。そこにあると、 に対して次のことができますtextbox

if(textbox1.text == String.EmptyOrNull)
{
    errorProvider1.SetError(textbox1, "Please enter valid field.");
}
else
{
    errorProvider1.Dispose();
    MessageBox.Show(textbox1.text);
}

明らかに、これは基本的なアプローチであり、リファクタリングが必要になりますが、それでタスクを実行し、C# とその実装にもう少し慣れる必要があります。

うまくいけば、それは役に立ちます。


アップデート:

1 つのフィールドが null または空になる可能性があることを確認できませんでした。ただし、他の 2 つのフィールドが必要です。通常どおりフィールドの検証を行うだけで済みますが、それらの結果を連結する必要があります。

&&オペランドを使用する必要があります。両方の変数が true であるかのように。その後、タスクを実行します。||検証するために偽であることを許可する意志はどこにありますか。

if(textbox1.text == String.EmptyOrNull) && 
        (textbox2.text == String.EmptyOrNull) && 
        (textbox3.text == String.EmptyOrNull))
{
    // One field is Null or Empty, do something.
}

何度も言いますが基本的な方法です。このような検証を処理するためのより効率的な方法がありますが、C# と Microsoft .Net は初めてなので、簡単な方法から始めます。

于 2013-03-12T21:52:16.593 に答える
0

別のオプションは、流暢な検証を使用することです

于 2013-03-12T22:45:50.193 に答える