1

ASP.NET MVC 2 を使用して、部分ビューで動的ドロップダウン リストを生成する必要があります。

コントローラ:

[HttpGet]
        public ActionResult GetDestinationList()
        {
            JqGridClientRepository rep = new JqGridClientRepository();
            IEnumerable<Client> clients = rep.GetClients();
            var li = from s in clients
                     select new
                     {
                         Company = s.Company
                     };
            return PartialView(li);
        }

以下は私が現在持っているビューであり、コントローラーによって返された選択リストに値をバインドする必要があります。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>

   <select> 
    <option value="1">One</option> 
    <option value="2">Two</option> 
    ...
</select>
4

2 に答える 2

2

いつものように、ビューモデルを書くことから始めることができます:

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

次に、コントローラー アクションでこのビュー モデルにデータを入力し、ビューに渡します。

[HttpGet]
public ActionResult GetDestinationList()
{
    JqGridClientRepository rep = new JqGridClientRepository();
    IEnumerable<Client> clients = rep.GetClients().ToList();
    var model = new MyViewModel();
    model.Values = clients.Select(x => new SelectListItem
    {
        Value = x.SomePropertyYouWantToBeUsedAsAValue,
        Value = x.SomePropertyYouWantToBeUsedAsText,
    });
    return PartialView(model);
}

次に、ビューをこのビュー モデルに強く型付けし、DropDownListFor ヘルパーを使用します。

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<MyViewModel>" 
%>
<%= Html.DropDownListFor(x => x.SelectedValue, Model.Values) %>

コントローラー アクションでは、データを取得する動的クエリを実行できます。IEnumerable<SelectListItem>重要なのは、各要素がドロップダウンで使用される値とテキストをそれぞれ表す場所を構成する必要があることです。

于 2013-05-16T10:46:47.667 に答える
0

このようにバインドできます。ビューは次のようになります。

<div class="form-field-bg">
                @Html.LabelFor(m => m.ClientName)<div class="validate-star"></div>
                @Html.DropDownListFor(m => m.ClientName, ViewBag.ClientList as IEnumerable<SelectListItem>, new { @class = "dropdown-field" })
            </div>
于 2013-05-16T10:49:36.873 に答える