2011-03-03 5 views
0

J'ai plusieurs formulaires, qui nécessitent une case à cocher pour chaque province/état. Par conséquent, j'ai fait une vue partielle pour rendre les cases à cocher dans un formulaire pour promouvoir la réutilisation du code. Mais lorsque l'utilisateur soumet le formulaire à une méthode de contrôleur, le RegionsViewModel n'est pas lié. La question générale est, comment puis-je obtenir plusieurs formulaires pour partager une vue partielle et voir le modèle?Modèle Reliure de reliure à plusieurs niveaux

Voici un exemple de code de ma situation modèles

public class Form1ViewModel 
{ 
    /* Some properties */ 
    public RegionsViewModel Regions {set; get;} 
} 

public class Form2ViewModel 
{ 
    /* Some properties */ 
    public RegionsViewModel Regions {set; get;} 
} 

public class Form3ViewModel 
{ 
    /* Some properties */ 
    public RegionsViewModel Regions {set; get;} 
} 

public class RegionsViewModel 
{ 
    public bool ON {set; get;} 
    public bool QC {set; get;} 
    /* this continues for all provinces and states */ 
} 

contrôleur

[HttpPost] 
public ActionResult Form(Form1VewModel model) { 

    //All properties except for model.RegionViewModel does not bind properly to the submitted form :(
} 

Form1ViewModel.aspx

<% using (Html.BeginForm()) 
    {%> 
    <!-- Binds some property --> 
    <% Html.RenderPartial("Controls/RegionSelector", Model.Regions); %> 
    <input type="submit" value="Submit Form!" /> 
<%}%> 

Commandes/RegionSelector.ascx

<%=Html.CheckBoxFor(x => x.AvailableProvince_ON> ON 
<%=Html.CheckBoxFor(x => x.AvailableProvince_QC> QC 
<!-- Binds to all provinces and states --> 

Mise à jour Remplacé par "Model.RegionSelectorVm" par "Model.Region". Merci d'avoir trouvé le bug dans mon code de démo Darin Dimitrov.

Répondre

1

Qu'est-ce que RegionSelectorVm? Il semble que ce soit le type de votre partiel. Essayez avec des modèles d'éditeur. Il est plus propre:

<% using (Html.BeginForm()) { %> 
    <!-- Binds some property --> 
    <%= Html.EditorFor(x => x.Regions) %> 
    <input type="submit" value="Submit Form!" /> 
<% } %> 

et à l'intérieur ~/Views/Shared/EditorTemplates/RegionsViewModel.ascx:

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.RegionsViewModel>" %> 
<%= Html.CheckBoxFor(x => x.ON) %> ON 
<%= Html.CheckBoxFor(x => x.QC) %> QC 

<!-- 
    Continue with inputs for the provinces and states 
    which are part of the RegionsViewModel model 
--> 

Maintenant, tout devrait se lier correctement.