Frage

Ich habe eine Editor-Vorlage erstellt Auswählen von einer dynamischen Dropdown-Liste für die Darstellung und es funktioniert, wie es für die Validierung ausnehmen sollte, die ich nicht in der Lage gewesen, um herauszufinden. Wenn das Modell die [Required] Attribut gesetzt hat, möchte ich, dass ungültig zu machen, wenn die Standard-Option ausgewählt ist.

Das Ansicht Modellobjekt, das als Drop-Down-Liste dargestellt werden muss, ist Selector:

public class Selector
{
    public int SelectedId { get; set; }
    public IEnumerable<Pair<int, string>> Choices { get; private set; }
    public string DefaultValue { get; set; }

    public Selector()
    {
        //For binding the object on Post
    }

    public Selector(IEnumerable<Pair<int, string>> choices, string defaultValue)
    {
        DefaultValue = defaultValue;
        Choices = choices;
    }
}

Die Editor-Vorlage sieht wie folgt aus:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<select class="template-selector" id="<%= ViewData.ModelMetadata.PropertyName %>.SelectedId" name="<%= ViewData.ModelMetadata.PropertyName %>.SelectedId">
<%
    var model = ViewData.ModelMetadata.Model as QASW.Web.Mvc.Selector;
    if (model != null)
    {
            %>
    <option><%= model.DefaultValue %></option><%
        foreach (var choice in model.Choices)
        {
            %>
    <option value="<%= choice.Value1 %>"><%= choice.Value2 %></option><%
        }
    }
     %>
</select>

ich irgendwie bekam es an die Arbeit, indem sie es aus der Sicht wie folgt aufrufen (wo Category eine Selector ist):

<%= Html.ValidationMessageFor(n => n.Category.SelectedId)%>

Aber es zeigt den Validierungsfehler für eine richtige Anzahl liefert und es kümmert sich nicht darum, ob ich das Required Attribut gesetzt.

War es hilfreich?

Lösung

Ich fand eine Lösung, bei der Validierung gegen versteckte Felder erfolgen benutzerdefinierte Validierungsregeln, hier . Mit diesem Ansatz können Sie ganz einfach benutzerdefinierte Validierung auf beliebige Typen hinzufügen.

Andere Tipps

Warum Ihre Editor-Vorlage wird nicht stark typisiert?

<%@ Control Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<QASW.Web.Mvc.Selector>" %>

Warum nicht die DropDownListFor Helfer verwenden:

<%= Html.DropDownListFor(
    x => x.SelectedId, 
    new SelectList(Model.Choices, "Value1", "Value2")
)%>

die magischen Saiten vermeiden Sie eine ChoicesList Eigenschaft zu Ihrer Ansicht Modell könnte hinzufügen:

public IEnumerable<SelectListItem> ChoicesList 
{
    get
    {
        return Choices.Select(x => new SelectListItem
        {
            Value = x.Value1.ToString(),
            Text = x.Value2
        });
    }
}

und binden Ihre Helfer es:

<%= Html.DropDownListFor(x => x.SelectedId, Model.ChoicesList) %>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top