2012-09-02 52 views
0

我想一個列表框在我的局部視圖綁定,但我發現了異常的實例...MVC:MultiSelectList對象引用未設置到對象

對象引用不設置到對象的實例。

引用@Html.ListBoxFor(x => x.SelectedRoles, Model.Roles)

我不知道我做錯了什麼......

型號:

public class RegisterModel { 
    public string UserName { get; set; } 
    public string Email { get; set; } 
    public string Password { get; set; } 
    public string ConfirmPassword { get; set; } 
    public string[] SelectedRoles { get; set; } 
    public MultiSelectList Roles { get; set; } 
} 

控制器:

public class AdminController : Controller { 
    [ChildActionOnly] 
    public ActionResult _AddUser() { 
     var model = new RegisterModel { 
      Roles = new MultiSelectList(Roles.GetAllRoles()) 
     }; 

     return View(model); 
    } 

} 

PartialView _AddUser .cshtml:

@model RobotDog.Models.RegisterModel 

@using(Html.BeginForm("_AddUser","Admin", FormMethod.Post)) { 
    @Html.EditorFor(x => x.Email, new { @class = "input-xlarge", @placeholder = "Email"}) 
    @Html.EditorFor(x => x.UserName, new { @class = "input-xlarge", @placeholder = "User Name"}) 
    @Html.EditorFor(x => x.Password, new { @class = "input-xlarge", @placeholder = "Password"}) 
    @Html.ListBoxFor(x => x.SelectedRoles, Model.Roles) 
} 

下面是引用_AddUser.cshtml Users.cshtml的觀點:

@model IEnumerable<RobotDog.Models.UserModel> 
<table></table> 
<div id="addUser"> 
    @Html.Partial("_AddUser", new ViewDataDictionary()) 
</div> 

回答

1

你的榜樣的問題是,通過調用@ Html.Partial你渲染局部_AddUser無經歷了控制器_AddUser方法。這意味着局部視圖的模型沒有可訪問的Model.Roles。您可以通過幾種不同的方式來解決這個問題。

一種可能性是使用@ Html.RenderAction或@ Html.Action來調用控制器方法,並讓控制器方法_AddUser根據您設置的值填充值。

+0

一個問題,這似乎是撕裂佈局內部分的部分。換句話說,partialView被封裝在'' – bflemi3

+0

@ bflemi3 - 您在主視圖內使用另一個html,head和body獲得渲染視圖?你使用Html.Action還是Html.RenderAction? – Carth

+0

我正在使用Html.Action – bflemi3

相關問題