2011-07-07 2 views
0

J'ai réussi à lier une liste d'objets correctement. Fonctionne bien. Maintenant, quand je change l'objet d'un objet complexe, il cesse de fonctionner.Liaison à un objet avec des propriétés et une liste

L'objet complexe est le nom de la pièce avec la liste des objets. Lorsque le 'postback' le nom renvoie bien, mais la liste des objets revient à zéro.

Des conseils s'il vous plaît?

Modèle Chambre:

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; 
    } 
} 

Modèle 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); 
    } 

Index Voir

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

MultiSelect Vue partielle

<%@ 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" /> 

Répondre

0

http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/ fournit une solution pour ce que vous cherchez. Sinon, une solution plus simple, mais moins flexible, consiste à placer un fichier Room.cshtml et un fichier Option.cshtml dans votre dossier Shared/EditorTemplates. Ensuite, vous mettriez

dans Room.cshtml

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

dans l'index et le contenu de votre vue partielle en Option.cshtml.

+0

Merci pour votre réponse. Le lien de Steven Sanderson me montre comment lier à une liste d'objets. J'ai été capable de faire cela, mais quand je l'ai changé en un objet qui contient une propriété et une liste d'objets (modèle parent-enfant), il me renvoie la propriété (parent) mais les enfants sont nuls. – user834252

Questions connexes