Je me bats avec un projet depuis quelques jours maintenant, et dans mon itération actuelle, j'ai décidé d'utiliser un modèle d'éditeur.ASP MVC3 - Editeur Modèle renvoyant des valeurs nulles au contrôleur lors de la publication
Le problème d'origine résultait d'une table maître liée à une table secondaire via une clé étrangère dans SQL. Dans ASP MVC, la table secondaire est représentée par le champ suivant:
[UIHint("BankListAgentId")]
public virtual ICollection<BankListAgentId> BankListAgentId { get; set; }
Parce que c'est un objet de collection, la GET
sur la page « Edit » fonctionne pour chaque élément particulier, mais sur la POSTBACK
toute la collection les articles sont soudainement nuls. Cependant, tous les autres champs contiennent les données appropriées. J'essaie d'utiliser et d'éditer le modèle, mais les éléments de la collection sont toujours retournés null
.
Voici le code que je utilise dans la vue
@model Monet.Models.BankListMaster
@using (Html.BeginForm())
{
<fieldset>
<legend>Stat(s) Fixed</legend>
<table id="fixedRows">
<tr>
<th>State Code</th>
<th>Agent ID</th>
<th></th>
</tr>
@foreach (var item in Model.BankListAgentId)
{
if (!String.IsNullOrWhiteSpace(item.AgentId) && item.FixedOrVariable.Equals("Fixed"))
{
@Html.EditorFor(model => item)
}
}
</table>
<br />
@Html.ActionLink("Add another", "BlankFixedRow", null, null, new { id = "addFixed" })
</fieldset>
}
Et voici le modèle de l'éditeur. Son nom est BankListAgentId
et se trouve dans un dossier nommé EditorTemplates
dans le dossier Vues
@model Monet.Models.BankListAgentId
<tr id="[email protected]">
<td>
@Html.DropDownListFor(model => model.StateCode,
(SelectList)ViewBag.StateCodeList, Model.StateCode)
</td>
<td>
@Html.EditorFor(model => model.AgentId)
@Html.ValidationMessageFor(model => model.AgentId)
</td>
<td>
<a href="#" class="deleteRow">delete</a>
</td>
@*<td><a href="#" onclick="$('#[email protected]').parent().remove();" style="float:right;">Delete</a></td>*@
</tr>
Voici le code du modèle BankListMaster
public partial class BankListMaster
{
public BankListMaster()
{
this.BankListStateCode = new HashSet<BankListStateCode>();
this.BankListAgentId = new HashSet<BankListAgentId>();
this.BankListAttachments = new HashSet<BankListAttachments>();
}
public int ID { get; set; }
public string BankName { get; set; }
public virtual ICollection<BankListStateCode> BankListStateCode { get; set; }
public virtual ICollection<BankListAttachments> BankListAttachments { get; set; }
[UIHint("BankListAgentId")]
public virtual ICollection<BankListAgentId> BankListAgentId { get; set; }
}
Et est enfin là le modèle BankListAgentId
public partial class BankListAgentId
{
public string AgentId { get; set; }
public int ID { get; set; }
public string FixedOrVariable { get; set; }
public string StateCode { get; set; }
public virtual BankListMaster BankListMaster { get; set; }
}
EDIT
L'utilisateur devra être capable de modifier dynamiquement la liste.
index pour une ICollection? Cela briserait l'exécution. –
Bon endroit, Dave. Merci. –
Je ne pense pas que IEnumerable puisse indexer non plus. Devrait utiliser IList. Le seul problème potentiel est si NealR doit utiliser foreach –