提交后缺少模型集合

时间:2014-02-02 18:59:18

标签: c# asp.net-mvc asp.net-mvc-4

嗨我有一个简单的模型,看起来像这样:

public class HomeModel
{
    public HomeModel()
    {
        Buildings = new List<Building>();
    }

    public List<Building> Buildings { get; set; }

    public int SelectedBuildingId { get; set; }

}

并在视图中我显示如下组合:

@Html.DropDownListFor(model => model.SelectedBuildingId, new SelectList(Model.Buildings, "Id", "Name"), "Choose Building... ")

现在当我点击提交按钮,然后建筑物列表消失 所以我试着用隐藏的字段来保持它

@Html.HiddenFor(model => model.Buildings)

但它没有用,有什么帮助吗?

4 个答案:

答案 0 :(得分:0)

您不需要再次列表...只需在Post动作中再次加载它。

修改 如果您坚持将其与重要数据一起发布。您应该将该列表序列化为字符串,然后在帖子后重建服务器中的列表。

记住你在MVC中不是普通的ASP.NET ...所以每个动作都是某种原子的。对于下拉列表的情况,这是正常行为:在服务器中重新加载列表(独立于加载它的位置)。

答案 1 :(得分:0)

如果您的视图是对HomeModel进行了强烈输入,那么您可以在回发事件中返回模型并将模型再次返回到您的视图中:

[HttpPost]
public ActionResult GetHomePostResult(HomeModel model)
{
    //do whatever with your model data

    return View("YourHomeGetView", model);
}

答案 2 :(得分:0)

<强> 1) and now when I click submit button, then the buildings list dissapears so I tryid to keep it with hidden field

@Html.HiddenFor(model => model.Buildings)

but it doesn't work, any help ?

Just Inspect元素并查看为此隐藏字段呈现的名称,确保您具有与模型中相同的名称(只有这些值才能被绑定)。如果在元素中看到其他名称,请将语法更改为

@Html.HiddenFor(model => model.Buildings, name {Name = Buildings })

在回发后,值将在模型中绑定

                                  **OR**

2)如果您使用某些Id或其他内容从DB中检索值。将此Id传递给视图。并把它放在隐藏的领域。在post post上使用适当的参数名称在控制器中捕获此值(Name必须与视图中的隐藏字段元素相同)。使用此ID再次检索DropDown并继续...

答案 3 :(得分:0)

@ Html.HiddenFor(model =&gt; model.Buildings) - &gt;这适用于原始类型,如int string等。 我不建议您将列表序列化到视图中,但如果您需要这样做,可以这样做:

           @for (int i = 0; i < Model.Buildings.Count; i++)
                {     
                  @Html.HiddenFor(c => c.Buildings[i])                      

                }

现在发布后,您将在视图中看到完整列表。