2016-12-20 21 views
1

this accepted answerを試しましたが、最新バージョンのASP.NETコアでこれとは異なる処理が行われるようです。 、別の方法としてASP.NETコアのRazorで条件付き属性を設定する

<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> 

を私はこれを試してみましたが、selected="selected"を得たが、Visual Studioは私に@selected is not a valid value of attribute of 'selected'その警告を与える:私はこのからまったくselectedの属性を持っていません。

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

私はそれを使用することができますが、警告を無視して、私が望むものを正確に表示しません。取得する方法はあります:

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

あなたは 'selected'プロパティを設定しません。タグヘルパーは、バインドするプロパティの値に基づいて行います。 - ' –

答えて

1

Model.Statusoptionと同じタイプになりますことを確認してください。私はおそらく私のモデルのプロパティとしてこれを置くだろう。そして、かみそりビューで

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

は:

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

これは、あなたが欲しいものを行う必要があります。

+0

空の最初のオプションをそのヘルパーに追加する方法はありますか? 'StatusOptions'リスト? – Shaun

+0

はい...空のオプションに必要な文字列を追加できます:http://stackoverflow.com/a/9294117/788509 – bluetoft

0

これを試してみて、私はここにStatusOptionsを列挙ではないだろうと考えて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> 
関連する問題