2012-10-19 33 views
0

所以我的控制器的代碼如下:從ViewBag傳遞一個值的局部視圖

private CommunityModelsContext dbCommunities = new CommunityModelsContext(); 

// GET: /Home/ 
public ActionResult Index() 
{ 
    //retrieve the Communities 
    ViewBag.Communities = dbCommunities.Communities.ToList(); 
    return View(); 
} 

而且我查看了所有這些重要的行開始局部視圖

<div id="LeftView" class="PartialView">@{Html.RenderPartial("CommunitiesPartial");}</div> 

,並在部分視圖,我想創建一個DropDownList(我還在學習,這是一個練習應用程序,只是爲了看看我是否理解了來自asp.net教程的概念),然後將這個實體列表,顯示一個字段,從其他(「名稱」和「ID」)獲取值

@model BuildingManagement.Models.Community.Community 

@Html.BeginForm("Index","CommunityController") 
{ 
    <div> 
     @Html.LabelFor(x => x.Name) 
     @Html.DropDownList("Community" , new SelectList(Model.Name,"id","Name")) 
    </div> 
} 

現在這拋出一個NullReference異常,模型爲null。索引頁面中沒有模型,但它不受任何約束,但是,數據通過ViewBag發送。

想法請?

回答

3

您的部分內容是強類型模型(BuildingManagement.Models.Community.Community)。所以,你需要這種模式首先傳遞到主視圖:

public ActionResult Index() 
{ 
    //retrieve the Communities 
    ViewBag.Communities = dbCommunities.Communities.ToList(); 
    BuildingManagement.Models.Community.Community model = ... retrieve your model 
    return View(model); 
} 

,然後因爲你決定,而不是使用視圖模型ViewBag您需要使用您在本ViewBag裏面你的部分定義的值保持:

@Html.DropDownList("Community", new SelectList(ViewBag.Communities, "id", "Name")) 

當然是一個更好的方法是使用一個視圖模型:

public class CommunityViewModel 
{ 
    [DisplayName("Name")] 
    public int Id { get; set; } 
    public IEnumerable<SelectListItem> Communities { get; set; } 
} 

,然後讓控制器填充視圖模型,並通過該視圖模型到視圖:

public ActionResult Index() 
{ 
    //retrieve the Communities 
    var communities = dbCommunities.Communities.ToList().Select(x => new SelectListItem 
    { 
     Value = x.Id.ToString(), 
     Text = x.Name 
    }) 
    var model = new CommunityViewModel 
    { 
     Communities = communities 
    } 
    return View(model); 
} 

,然後讓你的圖和局部強類型的視圖模型:

@model CommunityViewModel 
@using (Html.BeginForm("Index","CommunityController")) 
{ 
    <div> 
     @Html.LabelFor(x => x.Id) 
     @Html.DropDownListFor(x => x.Id, Model.Communities) 
    </div> 
} 
相關問題