如何在MVC中发布后保留DropDown的值

时间:2015-11-03 18:25:55

标签: javascript jquery asp.net-mvc asp.net-mvc-4

我在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"]);
        .....

我的实体确实有一些下拉列表而不是值。

2 个答案:

答案 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
                                })
         }
}