2016-12-20 6 views
1

Ich habe versucht, this accepted answer, aber es scheint, als ob dies in der neuesten Version von ASP.NET Core anders behandelt werden kann. Ich habe kein selected Attribut überhaupt von diesem:Festlegen von bedingten Attributen in Razor für ASP.NET Core

<select class="form-control" asp-for="Status"> 
    <option></option> 
    @foreach (var option in Enum.GetNames(typeof(StatusOptions))) { 
     <option value="@option" @{if (option == Model.Status) { <text>selected="true"</text> } }>@option</option> 
    } 
</select> 

Als Alternative habe ich versucht, diese und bekam selected="selected", aber Visual Studio gibt mir eine Warnung, dass @selected is not a valid value of attribute of 'selected'.

Ich kann das verwenden, aber ich muss die Warnung ignorieren und es nicht genau das, was ich will. Gibt es eine Möglichkeit zu bekommen:

<option value="firstOption" selected>firstOption</option> 
+0

Sie legen die Eigenschaft "selected" nicht fest. Der Tag Helper macht das basierend auf dem Wert der Eigenschaft, an die Sie binden. - '' –

Antwort

1

sein Ich denke, dass ich die StatusOptions hier nicht aufzählen würde. Ich würde dies wahrscheinlich als eine Eigenschaft auf mein Modell setzen.

public List<SelectListItem> StatusOptions => Enum.GetNames(typeof(StatusOptions)).Select(o => new SelectListItem { 
    Text = o, 
    Value = o, 
    Selected = o == this.Status 
}).ToList(); 

Dann in der Rasierer-Ansicht:

@Html.DropDownListFor(m => m.Status, Model.StatusOptions, new { @class="form-control", asp_for = "status" }) 

Dies sollte das tun, was Sie wollen.

+0

Gibt es eine Möglichkeit, eine leere erste Option zu diesem Helfer hinzuzufügen, oder muss es in injiziert werden die 'StatusOptions'-Liste? – Shaun

+0

Ja ... Sie können eine Zeichenfolge für die leere Option hinzufügen: http://StackOverflow.com/a/9294117/788509 – bluetoft

0

die Sie interessieren und stellen Sie sicher, Model.Status wird vom gleichen Typ wie option in foreach

<select class="form-control" asp-for="Status"> 
     <option></option> 
     @foreach (var option in Enum.GetNames(typeof(StatusOptions))) { 
      <option value="@option" @{option == Model.Status ? "selected" : ""} }>@option</option> 
     } 
    </select> 
Verwandte Themen