0

関数IValidatableObjectを介して検証が検証される継承するクラスを取得しました。IEnumerable<ValidationResult>この関数内では、すべてのフィールドをチェックして1つのValidationResultメッセージを返すことができます。

しかし、私の問題は、membernames.ToArray()1つの値しか渡さないことです。ビューページのデベギング中、およびフィールドが有効かどうかをチェックするときに、Html.ViewData.ModelState.IsValid("<fieldname>")

以下は、無効なすべてのフィールドを含むValidationResultメッセージを返す場合のコードです。はフィールドのstring.Join(",", membernames.ToArray())コレクションを返します。(つまり、「FirstName」、「LastName」)

List<string> membernames = new List<string>();

//Firstname
if (FirstName.Trim() == string.Empty)
{
   isValid = false;
   membernames.Add(@"""FirstName""");
}

//Lastname
if (LastName.Trim() == string.Empty)
{
   membernames.Add(@"""LastName""");
   isValid = false;
}

if (!isValid)
{
    yield return new ValidationResult("Please complete all fields marked with *", new[] { string.Join(",", membernames.ToArray()) });
}

正しいタイプを渡しnew[] { .. }ますか?

お知らせ下さい。前もって感謝します。

4

1 に答える 1

0

Mvc3の場合:

コントローラ内:

ModelState.AddModelError("FirstName", "FirstName Minimum 2 Char");
ModelState.AddModelError("FirstName", "FirstName Maximum 20 Char");
ModelState.AddModelError("LastName", "Error Message");

すべてのプロパティに対して1つのエラーメッセージのみが必要な場合:

ModelState.AddModelError("", "First Error Message");
ModelState.AddModelError("", "Second Error Message");

ビューで:

@using (Html.BeginForm()) {
    @Html.ValidationSummary()

    @Html.LabelFor(model => model.FirstName)
    @Html.EditorFor(model => model.FirstName)
    @Html.ValidationMessageFor(model => model.FirstName)

    @Html.LabelFor(model => model.LastName)
    @Html.EditorFor(model => model.LastName)
    @Html.ValidationMessageFor(model => model.LastName)

   //other fields...
}

jqueryと検証プラグインを忘れないでください:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
于 2012-05-19T15:29:12.020 に答える