9

DropDownlist がデフォルトで現在の値を選択しないという厄介な問題があります。

コントローラ:

var YearsCycling = new SelectList(new List<SelectListItem>() 
{ 
    new SelectListItem(){ Value="1yr", Text="1yr"},
    new SelectListItem(){ Value="1-3yrs", Text="1-3yrs"}, 
    new SelectListItem(){ Value="3-5yrs", Text="3-5yrs"}, 
    new SelectListItem(){ Value="5-10yrs", Text="5-10yrs"}, 
    new SelectListItem(){ Value="10+yrs", Text="10+yrs"} 
},
"Value",
"Text",
new SelectListItem() { Value = "5-10yrs", Text = "5-10yrs", 
Selected = true });
ViewBag.YearsCycling = YearsCycling;

意見:

<%:Html.DropDownListFor(model=>model.YearsCycling,(SelectList)ViewBag.YearsCycling,"-select-") %>

ただし、「5-10yrs」を選択する代わりに、「-select-」オプションが表示されるだけで、DOM ソースを調べると、どの要素も選択されていません。

更新:問題が何であるかはまだわかりませんが、何か醜いことをすることで今のところ機能しています:

<%
    var sl = (SelectList)ViewBag.YearsCycling;
%>
<select name="YearsCycling" id="YearsCycling">
<%foreach(var li in sl){  %>
    <option value="<%:li.Value %>" <%if(li.Selected){%>selected="true"<%}%>><%:li.Text %></option>
<%} %>
</select>

これは最善の解決策ではありませんが、髪を引っ張っていたためにこの質問にたどり着いた場合は、これが役立つはずです.

4

8 に答える 8

19

私はあなたがこれを通り過ぎたと確信していますが、ドロップダウンリストに私のビューモデルクラスのプロパティと同じ名前を付けていたので、ちょっと前にこれに火傷を負いました.

ドロップダウンリストの名前を別のものに変更すると、問題が解決しました。

于 2013-04-24T22:07:34.123 に答える
7

これを試して:

ビューモデルを作成します。

public class MyViewModel
{
    public string SelectedValue { get; set; }
    public IEnumerable<SelectListItem> YearsCycling { get; set; }
}

コントローラ:

var YearsCycling = new SelectList(new List<SelectListItem>() 
{ 
    new SelectListItem(){ Value="1yr", Text="1yr"},
    new SelectListItem(){ Value="1-3yrs", Text="1-3yrs"}, 
    new SelectListItem(){ Value="3-5yrs", Text="3-5yrs"}, 
    new SelectListItem(){ Value="5-10yrs", Text="5-10yrs"}, 
    new SelectListItem(){ Value="10+yrs", Text="10+yrs"} 
},
"Value",
"Text");

MyViewModel model = new MyViewModel();
model.YearsCycling = YearsCycling;
model.SelectedValue = "5-10yrs";
return View(model);

意見:

<%:Html.DropDownListFor(model=>model.SelectedValue,(SelectList)Model.YearsCycling) %>
于 2013-01-30T13:21:28.863 に答える
5

リストを次のようにレンダリングする場合:@Html.DropDownListFor(model => model.EntityID, Model.EntitySelectList)

選択オプションをレンダリングするときに .NET MVC が使用する値は、 の値と一致しますmodel.EntityID.ToString()

... 選択しませんModel.EntitySelectList.SelectedValue

... またはEntitySelectList.Item.SelectedValueアイテムのいずれか。

... つまり、リスト自体以外のものを DropDownListFor でレンダリングする場合、リストリスト項目の両方の SelectedValue プロパティは無視されます。

Model.EntitySelectList.SelectedValue または Model.EntitySelectList.Item.SelectedValue が設定されていても、ASP.NET MVC は選択をレンダリングしません。model.EntityID代わりにを使用してください。

于 2013-10-29T16:56:06.077 に答える
3

あなたのコードはそうあるべきです。

var YearsCycling = new List<SelectListItem>() 
{ 
    new SelectListItem(){ Value="1yr", Text="1yr"},
    new SelectListItem(){ Value="1-3yrs", Text="1-3yrs"}, 
    new SelectListItem(){ Value="3-5yrs", Text="3-5yrs"}, 
    new SelectListItem(){ Value="5-10yrs", Text="5-10yrs", Selected=true}, 
    new SelectListItem(){ Value="10+yrs", Text="10+yrs"} 
};

ViewBag.YearsCycling = YearsCycling;

代わりにこのオーバーロードを使用できます。

<%:Html.DropDownListFor(model=>model.YearsCycling,ViewBag.YearsCycling as List<SelectListItem>) %>
于 2013-01-30T13:17:04.793 に答える
2

ドロップダウンリストのバインディングはMVCでは非常にトリッキーです。私は非常に恥ずかしい思いをしました

作成

      ViewBag.CityId = new SelectList(db.Cities, "ID", "Name");

編集中の場合は user.CityID 編集時に都市を選択するようにします

      ViewBag.CityId = new SelectList(db.Cities, "ID", "Name", user.CityID);

あなたのビューでこのトリックを行うだけです

     @Html.DropDownList("CityId", "Select")

これは私が知っている最も簡単な方法です....

于 2013-03-20T11:50:14.907 に答える
1

html 要素と同じ名前の ViewBag を使用すると、いくつかの問題が発生します。

そのため、SelectList が ViewBag.EventId に格納されている場合、EventId に DropDownList を使用しません。

ViewBag.EventId を ViewBag.EventData に変更し、修正しました。

于 2013-12-25T22:32:08.520 に答える