如何在回发后保持dropdownlist选择的值

时间:2011-08-08 11:54:55

标签: asp.net-mvc

在asp.net mvc3中如何在回发后保持下拉列表选中项目。

6 个答案:

答案 0 :(得分:2)

做这样的事情:

[HttpPost]
    public ActionResult Create(FormCollection collection)
    {  if (TryUpdateModel(yourmodel))
            { //your logic 
              return RedirectToAction("Index");
            }
          int selectedvalue = Convert.ToInt32(collection["selectedValue"]);
           ViewData["dropdownlist"] = new SelectList(getAllEvents.ToList(), "EventID", "Name", selectedvalue);// your dropdownlist
            return View();
     }

在视图中:

 <%: Html.DropDownListFor(model => model.ProductID, (SelectList)ViewData["dropdownlist"])%>

答案 1 :(得分:2)

更简单,您可以在ActionResult输入参数中包含下拉列表的名称。您的下拉列表应该是表单标签。当ActionResult发布到,ASP.Net将遍历查询字符串,表单值和cookie。只要包含下拉列表名称,就会保留选定的值。

这里我有一个包含3个下拉列表的表单,这些表单会发布到ActionResult。下拉列表名称(不区分大小写):ReportName,Year和Month。

    //MAKE SURE TO ACCEPT THE VALUES FOR REPORTNAME, YEAR, AND MONTH SO THAT THEY PERSIST IN THE DROPDOWNS EVEN AFTER POST!!!!
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult ReportSelection(string reportName, string year, string month)
    {
        PopulateFilterDrowdowns();
        return View("NameOfMyView");
    }

答案 2 :(得分:1)

MVC不使用ViewState,这意味着您需要自己管理值持久性。通常,这是通过您的模型完成的。因此,假设您有一个视图模型,例如:

public class MyViewModel { }

你的控制器:

public class MyController : Controller 
{
    public ActionResult Something()
    {
        return View(new MyViewModel());
    }

    public ActionResult Something(MyViewModel model)
    {
        if (!ModelState.IsValid)
            return View(model);

        return RedirectToAction("Index");
    }
}

现在,当您使用数据(可能不正确 - 验证失败)将模型传递回视图时,当您使用DropDownListFor方法时,只需传入值:

@Model.DropDownListFor(m => m.Whatever, new SelectList(...))

......等等。

MVC的模型绑定将负责将数据读入模型,您只需确保将其传递回视图以再次显示相同的值。

答案 3 :(得分:0)

假设所选项目是帖子的一部分,控制器现在知道它是什么。只需在ViewData字典中有一个条目,指示应该选择哪个项目(获取时为null或者未选择任何内容)。在视图中,检查值,如果它不为空,请选择适当的选项。

答案 4 :(得分:0)

使用HttpRequestBase对象。 在视图中,这应该有效:

 @Html.DropDownList("mydropdown", ViewBag.Itens as IEnumerable<SelectListItem>, new { value = Request["mydropdown"] })

答案 5 :(得分:0)

如果要在控制器操作方法中构建下拉列表数据源,您可以将选定的值发送给它

控制器:

 public ActionResult Index( int serviceid=0)
            {


             // build the drop down list data source
                List<Service> services = db.Service.ToList();
                services.Insert(0, new Service() { ServiceID = 0, ServiceName = "All" });
               // serviceid is the selected value you want to maintain
                ViewBag.ServicesList = new SelectList(services, "ServiceID", "ServiceName",serviceid);

               if (serviceid == 0)
                {
                    //do something
                }
                else
                {
                     // do another thing

                }
                return View();
           }

查看:

 //ServiceList is coming from ViewBag
@Html.DropDownList("ServicesList", null, htmlAttributes: new { @class = "form-control" })