2015-04-23 60 views
4

嗨,我在index.cshtml页面中使用了部分视图。部分视图包含一个从数据库动态绑定的dropdownlist。如何使用模型在mvc 4的分部视图中绑定dropdownlist?

我不想使用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") 

在Partialview

@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> 

,但我得到空模型的误差。

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

+0

DropDownListFor()的'第二个参数''是的IEnumerable '(可能是或者你需要一个名为'Mobiledropdown1'一个'ViewBag'财产是'IEnumerable ')你的模型是什么(你真的有一个名为'Mobiledropdown1'的属性)为什么你不使用强类型的助手?并显示例外的全部细节。 –

+0

存在@ Html.Partial(string viewName,object model),因此您可以将模型传递给强类型的局部视图。 –

回答

4

您应该使用视图模型,这样你就可以同时包含列表和其选定的属性,是这样的:

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) 
+1

属性'Data'需要是'IEnumerable '或'SelectList',或者帮助器需要是'@ Html.DropDownListFor(m => m.SelectedId,new SelectList(Model.Data,“valueField” ,“textField”))' –

+0

@StephenMuecke好的留言我忽略了,更新后反映。 – mattytommo

+0

我已经使用@ Html.DropDownListFor(m => m.SelectedId,new SelectList(Model.Data,“valueField”,“textField”)) 谢谢您的回复。 –

相关问题