2015-04-23 22 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」)) 謝謝您的回覆。 –

相關問題