web-dev-qa-db-ja.com

MVC5-DropDownListFor Htmlヘルパーで「selectedValue」を設定する方法

質問が言うように:DropDownListFor HtmlヘルパーでselectedValueを設定するには?

他のほとんどのソリューションを試してみましたが、どれも機能しなかったため、新しい質問を始めています。

これらのどれも助けにはなりませんでした:

@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", 2), htmlAttributes: new { @class = "form-control" })

//Not working with or without cast
@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", (ProjectName.Models.TipDepozita)Model.TipoviDepozita.Single(x => x.Id == 2)), htmlAttributes: new { @class = "form-control" })
@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", (ProjectName.Models.TipDepozita)Model.TipoviDepozita.Where(x => x.Id == 2).FirstOrDefault()), htmlAttributes: new { @class = "form-control" })

@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", new SelectListItem() { Value="2", Selected=true}), htmlAttributes: new { @class = "form-control" })

可能な場合は、リストだけのためにSelectListItemsまたはViewModelを手動で作成しないようにします。

13
Dino

DropDownListFor()(またはDropDownList())メソッドを使用してモデルプロパティにバインドすると、選択したオプションを設定するプロパティの値になります。

内部的に、メソッドは独自の_IEnumerable<SelectListItem>_を生成し、プロパティの値に基づいてSelectedプロパティを設定するため、コード内のSelectedプロパティの設定は無視されます。尊重されるのは、たとえばモデルプロパティにバインドしないときだけです

_@Html.DropDownList("NotAModelProperty", new SelectList(Model.TipoviDepozita, "Id", "Naziv", 2))
_

ソースコード 、特にSelectInternal()およびGetSelectListWithDefaultValue()メソッドを調べて、どのように機能するかを確認できることに注意してください。

ビューが最初にレンダリングされたときに選択したオプションを表示するには、モデルをビューに渡す前に、GETメソッドでプロパティの値を設定します

また、ビューモデルにプロパティ_IEnumerable<SelectListItem> TipoviDepozita_を含め、コントローラでSelectListを生成することをお勧めします

_var model = new YourModel()
{
    TipoviDepozita = new SelectList(yourCollection, "Id", "Naziv"),
    TipPopustaId = 2 // set the selected option
}
return View(model);
_

だから、ビューは

_@Html.DropDownListFor(m => m.TipPopustaId, Model.TipoviDepozita, new { @class = "form-control" })
_
17
user3559349

モデルで宣言するときに、戻り選択値が文字列であり、intではないことを確認してください。

例:

public class MyModel
{
    public string TipPopustaId { get; set; }
}
1
p.sturge
public static class EnumHelper
{
    public static SelectList EnumToSelectList<TEnum>(this Type enumType, object selectedValue)
    {  
        return new SelectList(Enum.GetValues(enumType).Cast<TEnum>().ToList().ToDictionary(n=> n), "Key", "Value", selectedValue);
    }
}

そしてあなたの見解では:

@Html.DropDownListFor(model => model.Role, EnumHelper.EnumToSelectList<Role>(typeof(Role), Model.Role),  new { htmlAttributes = new { @class = "padding_right" } })
@Html.ValidationMessageFor(model => model.Role, "", new { @class = "text-danger" })

EnumToListの代わりにその他のリストを使用して、Listtypeプロパティのキーと値を選択します

0
user10155578