Asp.net mvc 回发过程中丢失了一个属性

Asp.net mvc 回发过程中丢失了一个属性,asp.net-mvc,razor,many-to-many,Asp.net Mvc,Razor,Many To Many,这让我快发疯了。我正试图编辑一个多对多的关系,下面是一个很好的答案,但当我添加了第二个关系时,事情开始变得古怪起来 public ActionResult Edit(Style style) { var accessoryIDs = style.SelectedAccessories.Select(a => a.ID); var fabricIDs = style.SelectedFabrics.Select(f => f.ID); 当首先加载样式进行编辑时,两个列

这让我快发疯了。我正试图编辑一个多对多的关系,下面是一个很好的答案,但当我添加了第二个关系时,事情开始变得古怪起来

public ActionResult Edit(Style style)
{
    var accessoryIDs = style.SelectedAccessories.Select(a => a.ID);
    var fabricIDs = style.SelectedFabrics.Select(f => f.ID);
当首先加载
样式
进行编辑时,两个列表都会被填充,并且都很好。因此,我进行编辑并保存
style.selectedAccessories
很好,
style.SelectedFabrics
为空! 在我看来,我有一个以上的织物编辑配件。如果我将两者互换,使织物优先于附件,则附件为空,而织物不为空

我首先为两个
选择的
s创建了一个共享模型,并进行了验证,以确保它与此无关(看看我有多绝望?),当然它没有

我在想我错过了一些可笑的事情

如果您需要,可以随意要求更多的代码

编辑:我意识到我问了一个离题的问题,很抱歉,但我真的很沮丧,希望有人能看一下提纲并说“哦,那,你只需要在那里调整一下,一切都会好的”。我猜它比这更深入,所以下面是要添加的代码来提出一个适当的问题:

控制器操作:

    public ActionResult Edit(int? id)
    {
        var style = db.Styles.Include(s => s.Fabrics).Include(s => s.Accessories).FirstOrDefault(s => s.ID == id);
        style.SelectedAccessories = db.Accessories.Select(f => new SelectedAccessory { ID = f.ID, Text = f.Name }).ToList();
        style.SelectedFabrics = db.Fabrics.Select(f => new SelectedFabric { ID = f.ID, Text = f.Name }).ToList();
        return View(style); // As said, the two above aren't null at this point
    }

    [HttpPost]
    public ActionResult Edit(Style style)
    {
        var accessoryIDs = style.SelectedAccessories.Where(s => s.IsSelected).Select(s => s.ID);
        // This one (style.SelectedFabrics) is now null
        var fabricIDs = style.SelectedFabrics.Where(s => s.IsSelected).Select(s => s.ID);
        return View(style);
    }
编辑视图:

@model Styleinfo.Models.Style
@using (Html.BeginForm())
{
    <div class="form-horizontal">
        @*swapping around makes the last of the two null in the controller*@
        @Html.EditorFor(model => model.SelectedAccessories)
        @Html.EditorFor(model => model.SelectedFabrics)
        <input type="submit" value="Save" class="btn btn-default" />
    </div>
}
模型:

public partial class Style
{
    public IEnumerable<SelectedFabric> SelectedFabrics { get; set; }
    public IEnumerable<SelectedAccessory> SelectedAccessories { get; set; }
}

public class SelectedAccessory // Again, SelectedFabric, otherwise identical
{
    public int ID { get; set; }
    public string Text { get; set; }
    public bool IsSelected { get; set; }
}

因此,在多次拉扯头发之后,我发现了几件事

1:浏览器根本没有回发第二个编辑器的内容。这些值根本不在POST数据中

所以我想我应该看看模型绑定,因为我看到其他人在这方面有困难。唉,没有用

2:我决定看看提交给浏览器的标记,我发现了这个

<div class="form-group">
  <label class="control-label col-md-2" for="SelectedAccessories">Accessories</label>
  <div class="col-md-10">
    <form action="/Styles/Edit/1" method="post">
      <input data-val="true" data-val-number="The field ID must be a number." data-val-required="Feltet ID skal udfyldes." id="SelectedAccessories_0__ID" name="SelectedAccessories[0].ID" type="hidden" value="1" />
      <label for="SelectedAccessories_0__IsSelected">Accessory 1</label>
      <input class="form-control check-box" data-val="true" data-val-required="Feltet IsSelected skal udfyldes." id="SelectedAccessories_0__IsSelected" name="SelectedAccessories[0].IsSelected" type="checkbox" value="true" />
      <input name="SelectedAccessories[0].IsSelected" type="hidden" value="false" />
    </form>
    <span class="field-validation-valid text-danger" data-valmsg-for="SelectedAccessories" data-valmsg-replace="true"></span>
  </div>
</div>
因此,我删除了
Html.BeginForm()

@model Styleinfo.Models.SelectedAccessory
@Html.HiddenFor(model => model.ID)
@Html.LabelFor(model => model.IsSelected, Model.Text)
@Html.EditorFor(model => model.IsSelected)
然后我所有的烦恼都消失了


正如我在问题中所说;“我在想我错过了什么可笑的东西…”我是。

现在,我们怎么能告诉你,为什么你没有发布你的视图,而你视图中的属性却返回空值?@ChrisPratt没必要这么粗鲁。这里是风景。
<div class="form-group">
  <label class="control-label col-md-2" for="SelectedAccessories">Accessories</label>
  <div class="col-md-10">
    <form action="/Styles/Edit/1" method="post">
      <input data-val="true" data-val-number="The field ID must be a number." data-val-required="Feltet ID skal udfyldes." id="SelectedAccessories_0__ID" name="SelectedAccessories[0].ID" type="hidden" value="1" />
      <label for="SelectedAccessories_0__IsSelected">Accessory 1</label>
      <input class="form-control check-box" data-val="true" data-val-required="Feltet IsSelected skal udfyldes." id="SelectedAccessories_0__IsSelected" name="SelectedAccessories[0].IsSelected" type="checkbox" value="true" />
      <input name="SelectedAccessories[0].IsSelected" type="hidden" value="false" />
    </form>
    <span class="field-validation-valid text-danger" data-valmsg-for="SelectedAccessories" data-valmsg-replace="true"></span>
  </div>
</div>
@model Styleinfo.Models.SelectedAccessory
@using (Html.BeginForm())
{
    @Html.HiddenFor(model => model.ID)
    @Html.LabelFor(model => model.IsSelected, Model.Text)
    @Html.EditorFor(model => model.IsSelected)
}
@model Styleinfo.Models.SelectedAccessory
@Html.HiddenFor(model => model.ID)
@Html.LabelFor(model => model.IsSelected, Model.Text)
@Html.EditorFor(model => model.IsSelected)