2011-07-07 44 views
0

我已经能够正确绑定对象列表。工作正常。现在,当我更改项目时,它会停止工作。绑定到具有属性和列表的对象

复杂对象是包含对象列表的房间名称。当'回发'名称返回正常,但对象列表返回为空。

有什么提示吗?

房型号:

public class Room 
{ 
    public string Name { get; set; } 
    public List<Option> Options { get; set; } 

    public Room() { } 
    public Room(string name, List<Option> options) 
    { 
     Name = name; Options = options; 
    } 
} 

期权定价模型

public class Option 
{ 
    public bool IsSelected { get; set; } 
    public string ImagePath { get; set; } 
    public int UniqueID { get; set; } 

    public Option() { } 
    public Option(bool isSelected, string imagePath, int uniqueID) 
    { IsSelected = isSelected; ImagePath = imagePath; UniqueID = uniqueID; } 
} 

的HomeController

public ActionResult Index() 
    { 
     List<Option> options = new List<Option>(); 

     options.Add(new Option(true, "../Content/cars_2.jpg", 4)); 
     options.Add(new Option(true, "../Content/vw_one_liter_concept01_2.jpg", 6)); 
     options.Add(new Option(false, "../Content/00018578.jpg", 8)); 
     //Get a list of selected options and union with all remaining 

     Room model = new Room("Room1", options); 

     return View(model); 
    } 
    [HttpPost] 
    public ActionResult Index(Room model) 
    { 
     ViewData["results"] = model.Options.Count(); 
     return View(model); 
    } 

索引视图

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MultiSelect.Models.Room>" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Index</title> 
    <script src="../../Scripts/jquery-1.4.1.js" type="text/javascript"></script> 
    <script src="../../Scripts/jquery-ui-1.8.10.custom.min.js" type="text/javascript"></script> 


</head> 
<body> 

<% using (Html.BeginForm()) 
    {%> 
    <%= Html.ValidationSummary(true)%> 
    <%= Html.TextBoxFor(m=> m.Name) %> 
    <% Html.RenderPartial("MultiSelect", Model.Options); %> 

<% } %> 
</body> 
</html> 

多选局部视图

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IList<MultiSelect.Models.Option>>" %> 
<% for (int counter = 0;counter< Model.Count(); counter ++) 
    { %> 
    <div class="opt"> 
     <%= Html.HiddenFor(i=> i[counter].UniqueID)%> 
     <%= Html.HiddenFor(i=> i[counter].ImagePath) %> 
     <%= Html.CheckBoxFor(i => i[counter].IsSelected)%> 
     <img src="<%= Model.ElementAt(counter).ImagePath %>" alt="Image" width="128" height="128" /> 
    </div> 
<% } %> 
<input id="Submit1" type="submit" value="submit" /> 

回答

0

http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/提供你正在寻找一个解决方案。

或者,更简单但不太灵活的解决方案是在Shared/EditorTemplates文件夹中放入一个Room.cshtml文件和一个Option.cshtml文件。然后你就会把

在Room.cshtml

<% Html.EditorFor(m => Model); %> 
在指数

,并在Option.cshtml您的局部视图的内容。

+0

感谢您的回答。 Steven Sanderson链接向我展示了如何绑定到对象列表。我能够做到这一点,但是当我将其更改为包含属性和对象列表(父 - 子模式)的对象时,它将返回属性(父),但子项为空。 – user834252

相关问题