在ASp.NET MVC中,您如何记住下拉列表的状态?

时间:2009-05-26 06:10:16

标签: asp.net asp.net-mvc validation

我有这个动作:

public ActionResult Add([Bind(Include = "Title,Description")] product product2Add){
--SNIP--
}

我正在使用视图模型模式,我创建了一个特殊的AddProduct_ViewModel类,其中包含我的产品类以及我在视图中需要的任何其他内容。这包括2个下拉列表;一个用于查找所有各种产品类别的数据库,另一个用于列出产品供应商。

当我对我的产品进行验证失败时,我看不到如何轻松保存下拉列表的状态(没有做一些冗长的数据库代码)。还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以在控制器中输入

Request.Form.Get("MyDropDownListId");

获取所选选项的值属性。

在回发后再次构建下拉列表时,您可以使用此值重新设置所选项目。

在您的模型中拥有属性“PageSize”时,在视图中设置所选项目的

示例

Response.Write(Html.DropDownList("pageSize",
            Model.PageSizes.ToSelectList(p => p.ToString(), p => p.ToString(), p => p.Equals(Model.PageSize))));

使用扩展方法ToSelectList():

public static List<SelectListItem> ToSelectList<T>(this IEnumerable<T> enumerable, Func<T, string> text, Func<T, string> value, Func<T, bool> selected)
{
    var items = enumerable.Select(f => new SelectListItem() { Text = text(f), Value = value(f) }).ToList();
    return items;
}

答案 1 :(得分:-2)

嗯..在MVC中没有viewstate,所以控件无法保存状态,虽然你可以使用一些技巧将它存储在cookie中使用javascript - 最好是jquery,或者在onChange事件中将这些信息保存到服务器端