嗨我有一个简单的模型,看起来像这样:
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)
但它没有用,有什么帮助吗?
答案 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])
}
现在发布后,您将在视图中看到完整列表。