Voici ma situation -Comment obtenir des données de EditorFor avec viewmodels imbriquées
J'ai deux modèles de vue imbriqués:
<%=Html.EditorFor(x => x.DisplayEntitiesWithRadioboxesViewModel)%><br />
qui siègent au sein de leur parent (StructureViewModel), Je peux peupler les ViewModels imbriqués facilement et le transmettre à la vue principale:
Dans le contrôle r - Exemple
var moveDepartment = new StructureViewModel();
moveDepartment.DisplayEntitiesWithRadioboxesViewModel = fullDepartmentList.Select(x => new DisplayEntityViewModel
{
Id = x.Id,
Path = x.Path,
PathLevel = x.PathLevel,
Description = x.Description,
});
return View(moveDepartment);
EditorTemplete - Exemple
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Site.Areas.Administration.ViewModel.DisplayEntityViewModel>>" %>
<table class="aligncenter"><%
if (Model != null)
{
foreach (var entity in Model)
{%>
<tr class="tRow">
<td style="text-align:left; text-indent:<%=Html.Encode(entity.PathLevel)%>em">
<%=Html.Encode(entity.Description)%>
<%=Html.RadioButton("radiobutton",entity.Id)%>
</td>
</tr><%
}
}%>
</table>
namespace Site.Areas.Administration.ViewModel
{
public class DisplayEntityViewModel
{
public int Id { get; set; }
public string Path { get; set; }
public string PathLevel { get; set; }
public string Description { get; set; }
}
}
Cependant lorsque je tente de retirer ces informations les ViewModels imbriquées sont nulles:
[HttpPost]
public ActionResult Move(StructureViewModel StructureViewModel)
Quand je passe la souris sur StructureViewModel
il ne contient que des données sur le ViewModel parent. Par exemple: une valeur masquée peut être vue mais DisplayEntitiesWithRadioboxesViewModel = null. La seule façon dont je sais comment accéder au DisplayEntitiesWithRadioboxesViewModel
est d'utiliser FormCollection
et de parcourir le FormCollection
pour sortir les informations dont j'ai besoin des ViewModels imbriqués.
Cela cependant ne semble pas juste, comme je l'ai trouvé à je dois alors re-peupler le DisplayEntitiesWithRadioboxesViewModel
avec les valeurs du FormCollection
, si par exemple une erreur est survenue et l'utilisateur doit être renvoyé à la même vue.
J'ai essayé de chercher sur le web/livres mais je ne trouve pas de solution.
Y a-t-il un meilleur moyen?
Merci d'avance pour toute aide.
Et pourquoi avez-vous utilisé un EditorFor pour un menu déroulant simple, , qui est facile à utiliser avec DropDownFor
Cela a maintenant été modifié pour utiliser le DropDownFor.
ce qui est la clé de la DisplayEntitiesWithRadioboxesViewModel valeur dans FormCollection
{string[3]}
[0] = "DisplayEntitiesWithRadioboxesViewModel.radiobutton"
[1] = "Action"
[2] = "OldParentId"
Clare :-)
Bonjour Stefanvds, J'ai modifié ma question ci-dessus pour répondre à vos questions. J'ai une vue parent qui contient une instance de DisplayEntitiesWithRadioboxesViewModel. Le DisplayEntitiesWithRadioboxesViewModel est IEnumerable. Merci Clare Détails cependant j'utiliser que pour les Vues imbriquées une fois dans ce – ClareBear
il est logique que la clé pour votre radiobutton est 'DisplayEntitiesWithRadioboxesViewModel.radiobutton' parce que dans votre éditeurPour vous avez un radiobutton avec son nom 'radiobutton'. Si je comprends bien, tout fonctionne, seule la valeur radiobuttons n'est pas analysée dans votre viewmodel. Je pense que la meilleure façon est de créer un helper RadioButtonList comme décrit ici: http://geekswithblogs.net/michelotti/archive/2009/08/05/mvc-radiobuttonlist-html-helper.aspx. J'ai fait la même chose avec CheckBoxList et ça a bien marché. aussi, peut-être remplacer radiobuttonlist avec dropdown? – Stefanvds
avez-vous réussi à le réparer? :) – Stefanvds