2
foreach (Person person in personList) {                               
  SelectListItem item = new SelectListItem();
  item.Value = person.Id;
  item.Text = person.FirstName + " " + person.LastName;                    
  items.Add(item);
}

ViewData["personSelectList"] = new SelectList(items, "Value", "Text", 4);

<%=Html.DropDownList("personId", ViewData["personSelectList"] as SelectList)%>

このコードは、Id = 4の人を選択されたアイテムとして設定するのではなく、常にリストの最初のアイテムを選択されたアイテムとして選択します。

どのステップが欠けていますか?

4

6 に答える 6

2

Selectedアイテム自体にプロパティを設定してみましたか?例えば

foreach (Person person in personList)
{
    items.Add(new SelectListItem()
    {
        Value = person.Id,
        Text = person.FirstName + " " + person.LastName,
        Selected = person.Id == 4
    });
}

アップデート

選択した値をビューに渡して、代わりにそこで処理する必要があると思います。

ViewData["personSelectList"] = new SelectList(items, "Value", "Text");
ViewData["personId"] = 4;

意見

<%= Html.DropDownList("personId", ViewData["personSelectList"] as SelectList) %> 
于 2012-08-09T14:17:47.267 に答える
1
items = new List<SelectListItem>();

foreach (Person person in personList)
{
    items.Add(new SelectListItem()
    {
        Value = person.Id,
        Text = person.FirstName + " " + person.LastName,
        Selected = person.Id == 4
    });
}

ViewData["personSelectList"] = items

次に表示

@Html.DropDownList("holdPersonSelectList", (List<SelectListItem>)ViewData["personSelectList")

その後、コントローラーに戻ります

public ActionResult Index(string holdPersonSelectList)

編集:コントローラーのholdPersonSelectListは、選択されたアイテムの値の文字列値を保持します。したがって、idフィールドの場合は、intに解析するだけです。

値を設定する場合は、その番号を保持する別のビューデータを渡し、jquery//javascriptを使用して設定します。

$('holdPersonSelectList').val('4');
于 2012-08-09T16:24:37.470 に答える
0

SelectListItem.Valueはですが、string渡しています4-これは整数です。"4"代わりに合格してみてください。

于 2012-08-09T14:20:39.607 に答える
0

MVC3を使用してテストを作成しましたが、問題なく動作します。

@{
var items = new[]
                {
                    new Test {Id = 1, Name = "Jhon"}, 
                    new Test {Id = 2, Name = "Scott"}
                };

var selectList = new SelectList(items, "Id", "Name", 2);
var selectEnumerable = items.Select(x => new SelectListItem
                                             {
                                                 Selected = x.Id == 2,
                                                 Text = x.Name,
                                                 Value = x.Id.ToString()
                                             });
}

@Html.DropDownList("name", selectList)
@Html.DropDownList("name2", selectEnumerable)

両方のDropDownListsで選択された値はScottであるため、コードで記述された2番目のアイテムを選択します。

于 2012-08-09T14:35:26.300 に答える
0

私の解決策は異なっていました。私はに変更SelectListする必要がありましたMultiSelectList

だから、foreachをする代わりに、私は次のようなことをします

int[] personListSelected= personList.Select(p=>(int)p.idPerson).ToArray();

IEnumerable<SelectListItem> personList = new MultiSelectList(personList, "idPerson", "namePerson",personListSelected);
于 2017-08-11T18:32:55.550 に答える
0

LINQを使用すると、次のことができます。

ViewData["personSelectList"] = new SelectList(items, "Value", "Text", items.FirstOrDefault(i => i.id == 4).id);

またはそれ以上に、

int SelectedID = 4;
ViewData["personSelectList"] = new SelectList(items, "Value", "Text", items.FirstOrDefault(i => i.id == SelectedID).id);
于 2021-07-27T15:13:34.260 に答える