Ich versuche, benutzerdefinierte Modellbindung zu arbeiten, aber aus irgendeinem Grund werden die Werte nicht festgelegt. Der Code scheint ligit zu sein, wenn er mit dem Arbeitscode verglichen wird, aber er bindet nicht. Ich denke, es ist eine Kleinigkeit, die ich vermisse.MVC-Modellbindung hält Werte NULL
Benutzerdefinierte Modell:
//Cluster is from Entity Framework
//BaseViewModelAdmin defines:
public List<KeyValuePair<string, string>> MenuItems;
public IPrincipal CurrentUser = null;
public Foundation Foundation; //also from Entity Framework
public class AdminClusterCreateModel : BaseViewModelAdmin
{
public Cluster Item;
public AdminClusterCreateModel()
{
Item = new Cluster();
}
}
Die Ansicht Form wie folgt aussieht:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Cluster</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Item.Active)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Item.Active)
@Html.ValidationMessageFor(model => model.Item.Active)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Item.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Item.Name)
@Html.ValidationMessageFor(model => model.Item.Name)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
und der Steuerung:
[HttpPost]
public ActionResult Create(AdminClusterCreateModel model, FormCollection form)
{
if(ModelState.IsValid) //true
{
var test = form["Item.Name"]; //Value is correct from form (EG: Test)
UpdateModel(model); //no error
}
//At this point model.Item.Name = null <--- WHY?
return View(model);
}
Cluster auf Anfrage
public partial class Cluster
{
public Cluster()
{
this.Team = new HashSet<Team>();
}
public long Id { get; set; }
public System.DateTime Created { get; set; }
public System.DateTime Modified { get; set; }
public bool Active { get; set; }
public long FoundationId { get; set; }
public string Name { get; set; }
public virtual Foundation Foundation { get; set; }
public virtual ICollection<Team> Team { get; set; }
}
Können wir Ihre Cluster-Klasse? Ist Item.Name definitiv eine öffentliche Eigenschaft und kein öffentliches Feld? Es ist eine Weile her, aber IIRC wird nur an Eigenschaften binden. – Xefan
Ich habe es zu der Frage hinzugefügt –
Haben Sie überprüft, ob es etwas in 'UpdateModel' gibt, das' model.Item' aktualisiert? –