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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie einfach einen nullable integer auf die Eigenschaft, die Sie binden die dropdownlist auf Ihrem view-Modell:
Auch um die richtige unauffällig HTML5 data -* - Attribute in der dropdown muss in einem Formular:
Auch werden Sie feststellen, dass ich losgeworden
ViewBag
(die ich einfach nicht ausstehen kann) und ersetzt es mit einem entsprechenden Grundstück, auf Ihre view-Modell, das enthält die möglichen Werte für das dropdown-Menü.Ich hatte das gleiche problem. Und bemerkte, dass dies passiert, wenn dropDownList ist bevölkert von ViewBag oder ViewData. Wenn Sie schreiben würde
@Html.DropDownListFor(model => Modell.SomeChoice, Modell.SomeChoice, "Select...") wie im obigen Beispiel die Validierung von Attributen wäre schrieb.
ViewData
also die Liste ist erreichbar über eine Liste mit Namen in einerUIHIn
t basiert Attribut.Diejenigen, die hier auf der Suche für das gleiche Verhalten in Kendo dropdownlist, fügen Sie bitte "notwendig" in Ihrem code.
)
[Erforderlich] - Attribut in das viewmodel hat bei mir nicht funktioniert, aber das einfügen der oben in Htmlattributes haben. Hoffe, das jemand hilft.