绑定在“部分视图”中选择列表

时间:2013-05-16 10:39:05

标签: asp.net asp.net-mvc asp.net-mvc-2 partial-views

我需要使用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>

2 个答案:

答案 0 :(得分: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>,其中每个元素分别代表下拉列表中使用的值和文本。

答案 1 :(得分: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>