我在MVC中有3个下拉列表,在选择它们的值并单击下一个按钮后,它将发布数据并显示一些文本框,其值在页面底部。当我点击NEXT并进入POST方法时,我得到错误,因为没有ViewBag值。如何在Post方法中保持viewbag的值?
这是我的索引控制器方法:
public ActionResult Index()
{
DAL.DataManager data = new DAL.DataManager();
List<LALegalType> LegalData = new List<LALegalType>();
//------------------------------Populate Entity Dropdown------------------------------------------//
LegalData = data.get_LA_Get_Legal_Type_Xref("Entity");
List<SelectListItem> listItem = createDropdowns(LegalData);
ViewBag.DDLEnityValue = new SelectList(listItem, "Value", "Text");
...
return View();
这是我的观点:
@Html.DropDownList("Entity", (SelectList)ViewBag.DDLEnityValue, new
{
@class = "validate[required]",
tabindex = 1,
required = true
})
}
这是mt post方法:
[HttpPost]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(FormCollection formCollection, Compliance_FormField model)
{
Utilities.functions F = new Utilities.functions();
string Entity = F.getControlValue(Request["Entity"]);
.....
我的实体确实有一些下拉列表而不是值。
答案 0 :(得分:1)
如果帖子无法将用户导航到新页面,则必须重新绑定帖子操作方法的下拉列表。 MVC没有ViewState来保存控件的状态,这就是为什么需要手动维护状态。
[HttpPost]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(FormCollection formCollection, Compliance_FormField model)
{
Utilities.functions F = new Utilities.functions();
string Entity = F.getControlValue(Request["Entity"]);
//Rebind DDL's
//Add logic to rebind you dropdownlist and set selected item from you model
}
希望这有帮助!
答案 1 :(得分:0)
您能做些类似的事情吗?只需像在cshtml页面中那样放置viewbag.DDLEnityValue的null检查即可。而且您将不再面对这个问题。
@{
if( ViewBag.DDLEnityValue != null ) {
Html.DropDownList("Entity", (SelectList)ViewBag.DDLEnityValue, new
{
@class = "validate[required]",
tabindex = 1,
required = true
})
}
}