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