DropDownListFor Unauffällig Validierung Erforderlich, die Nicht immer richtigen Attribute

Diese Frage ist ähnlich, aber die akzeptierte Antwort löst es server-Seite bin ich daran interessiert, client-side-Lösungen.

Angesichts dieses ViewModel

public class MyViewModel
{
    public string ID { get; set; }

    [Required(ErrorMessage = "I DEMAND YOU MAKE A CHOICE!")]
    [Display(Name = "Some Choice")]
    public int SomeChoice{ get; set; }   
    [Required(ErrorMessage = "I DEMAND YOU MAKE A CHOICE!")]
    [Display(Name = "Keyword")]
    public string Keyword { get; set; }    
}

und die razor

<div>
@Html.LabelFor(model => model.SomeChoice, new { @class = "label" })
@Html.DropDownListFor(model => model.SomeChoice, (SelectList)ViewBag.SomeChoice, "Select...")
@Html.ValidationMessageFor(model => model.SomeChoice)
</div>

übernehmen und ViewBag.SomeChoice enthält eine select-Liste mit Auswahlmöglichkeiten

Den gerenderten html nicht die data-val="true" data-val-required="ich verlange SIE EINE Entscheidung TREFFEN!" - Attribute in es wie @Html."EditorFor" (model => Modell.Schlüsselwort) oder @Html.TextBoxFor machen würde.

WARUM?

Hinzufügen a class = "erforderlich" ist, um es so

@Html.DropDownListFor(model => model.SomeChoice, (SelectList)ViewBag.SomeChoice, "Select...", new { @class = "required" })

verwendet die jQuery Validierung der Klasse Semantik und Blöcke auf abschicken aber nicht die Meldung angezeigt wird. Ich kann diese Art der Sache

@Html.DropDownListFor(model => model.SomeChoice, (SelectList)ViewBag.SomeChoice, "Select...", new Dictionary<string, object> { { "data-val", "true" }, { "data-val-required", "I DEMAND YOU MAKE A CHOICE!" } })

Wird die richtigen Attribute gibt es, und Blöcke auf senden und die Nachricht angezeigt, aber nicht die Vorteile der RequiredAttribute ErrorMessage ich habe auf meinem ViewModel

So hat jemand geschrieben DropDownListFor, verhält sich wie die anderen HtmlHelpers mit Hinblick auf die Validierung?

BEARBEITEN
Hier meine GENAUEN code

Im HomeController.cs

  public class MyViewModel
  {
    [Required(ErrorMessage = "I DEMAND YOU MAKE A CHOICE!")]
    [Display(Name = "Some Choice")]
    public int? SomeChoice { get; set; }
  }


    public ActionResult About()
    {
        var items = new[] { new SelectListItem { Text = "A", Value = "1" }, new SelectListItem { Text = "B", Value = "2" }, new SelectListItem { Text = "C", Value = "3" }, };
        ViewBag.SomeChoice = new SelectList(items,"Value", "Text");
        ViewData.Model = new MyViewModel {};
        return View();
    }

Über.cshtml

@using Arc.Portal.Web.Host.Controllers
@model MyViewModel
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

@using (Html.BeginForm())
{
<div>
    @Html.LabelFor(model => model.SomeChoice)
    @Html.DropDownListFor(model => model.SomeChoice, (SelectList)ViewBag.SomeChoice, "Select...")
    @Html.ValidationMessageFor(model => model.SomeChoice)
</div>

<button type="submit">OK</button>
}

Und hier ist der gerenderte code

<form action="/Home/About" method="post">    <div>
    <label for="SomeChoice">Some Choice</label>
    <select id="SomeChoice" name="SomeChoice"><option value="">Select...</option>
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
</select>
    <span class="field-validation-valid" data-valmsg-for="SomeChoice" data-valmsg-replace="true">    </span>
</div>
<button type="submit">OK</button>
</form>

Sendet es wieder an meinem controller...das sollte nicht passieren

InformationsquelleAutor Peter | 2011-10-19
Schreibe einen Kommentar