【问题标题】:How to bind dropdownlist in partial view in mvc 4 using model?如何使用模型在 mvc 4 的部分视图中绑定下拉列表?
【发布时间】:2015-04-23 07:25:21
【问题描述】:

您好,我在 index.cshtml 页面中使用局部视图。部分视图包含一个从数据库动态绑定的下拉列表。

我不想使用 viewbag 或 viewdata 来绑定这个下拉列表。

在控制器中

    // GET: Reporting/Home
    public ActionResult Index()
    {
        var view = View();

        return view;
    }

    public ActionResult _ReportingMenu()
    {
        var DashboardList = GetAllDashboards();

        return View(DashboardList);
    }


    public IEnumerable<DashboardDefinition> GetAllDashboards()
    {
        return _reortDefinitionService.GetAllDashboards();
    } 

在 index.cshtml 中

@model IEnumerable<Portal.Domain.ReportingModule.ReportDefinition.DashboardDefinition>

@{
    ViewBag.Title = "Reporting";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Reporting View</h2>
@Html.ActionLink("Add new Chart", "Create", "Chart", new { area = "Reporting" }, null)

@Html.Partial("_ReportingMenu")

在部分视图中

    @model  Portal.Domain.ReportingModule.ReportDefinition.DashboardDefinition

    <div class="nav navbar navbar-default navbar-no-margin submenu">

        @Html.DropDownList("Mobiledropdown1",IEnumerable<Model.DashboardName>)   

        <a id="SubMenuIntegratorNew" class="btn btn-default submenu-item" href="#">
            <i class="fa fa-file-o fa-lg"></i>
            <span class="submenu-item-text">New</span>
        </a>
        <a id="SubMenuIntegratorSave" class="btn btn-default submenu-item" href="#">
            <i class="fa fa-floppy-o fa-lg"></i>
            <span class="submenu-item-text">Save</span>
        </a>
        <a id="SubMenuIntegratorSaveAs" class="btn btn-default submenu-item" href="#">
            <i class="fa fa-files-o  fa-lg"></i>
            <span class="submenu-item-text">Save As</span>
        </a>
        <a id="SubMenuIntegratorAddChart" class="btn btn-default submenu-item" href="#">
            <i class="fa fa-picture-o fa-lg"></i>
            <span class="submenu-item-text">Add Chart</span>
        </a>
    </div>

但我得到一个空模型错误。

不知道如何在局部视图中实现

【问题讨论】:

  • DropDownListFor() 的第二个参数是 IEnumerable&lt;SelectListItem&gt; (或者你需要一个名为 ViewBag 的属性名为 Mobiledropdown1IEnumerable&lt;SelectListItem&gt;)你的模型是什么(你真的有一个名为Mobiledropdown1 的属性,为什么你不使用强类型助手?并显示异常的全部细节。
  • 有 @Html.Partial(string viewName, object model) 所以你可以将模型传递给强类型的局部视图。

标签: c# .net asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

您应该使用视图模型,这样您就可以在其中包含列表和选定的属性,例如:

public class DashboardViewModel
{
    public IEnumerable<SelectListItem> Data { get; set; }
    //Might not be an int, but just an example
    public int SelectedId { get; set; }
}

然后将其填充到您的控制器中:

public ActionResult _ReportingMenu()
{
    var DashboardList = GetAllDashboards();

    var dropdownData = DashboardList
        .Select(d => new SelectListItem
        {
            Text = d.Name, //Need to apply the correct text field here
            Value = d.Id.ToString() //Need to apply the correct value field here
        })
        .ToList();

    var model = new DashboardViewModel
    {
       Data = dropdownData 
    };

    return View(model);
}

然后在你的两个视图中,设置模型:

 @model DashboardViewModel

然后在你的部分你可以做:

 @Html.DropDownListFor(m => m.SelectedId, Model.Data)

【讨论】:

  • 属性Data 需要是IEnumerable&lt;SelectListItem&gt;SelectList,或者助手需要是@Html.DropDownListFor(m =&gt; m.SelectedId, new SelectList(Model.Data, "valueField", "textField"))
  • @StephenMuecke 好声音我忽略了这一点,更新以反映。
  • 我已经使用@Html.DropDownListFor(m => m.SelectedId, new SelectList(Model.Data, "valueField", "textField")) 谢谢你的回复。
  • @KaranPatel 是的,这也很好。
猜你喜欢
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多