MVC模型绑定使值保持为NULL

Hug*_*ing 5 c# asp.net-mvc-4

我正在尝试使自定义模型绑定工作,但由于某种原因,值未设置.在将它与工作代码进行比较时,代码似乎是连贯的,但它仍然没有绑定.我想这是我遗失的一些微不足道的事情.

定制型号:

//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();
    }
}
Run Code Online (Sandbox Code Playgroud)

视图表单如下所示:

@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>
}
Run Code Online (Sandbox Code Playgroud)

和控制器:

[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);
}
Run Code Online (Sandbox Code Playgroud)

根据要求集群

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; }
}
Run Code Online (Sandbox Code Playgroud)

sha*_*kib 8

DefaultModelBinder在"属性"上显式工作,而不是在"字段"上工作

更改public Cluster Itempublic Cluster Item {get; set;}AdminClusterCreateModel应该做的伎俩.

public class AdminClusterCreateModel : BaseViewModelAdmin
{
    public Cluster Item {get; set;}

    public AdminClusterCreateModel()
    {
        Item = new Cluster();
    }
 }
Run Code Online (Sandbox Code Playgroud)

问候