我有以下情况。我有2次下降。第一个中的选项加载在document.ready上。当用户在第一个下拉列表中进行选择时,将加载第二个选项。我正在使用jQuery填充两者,一切都很好用。
这些下拉列表存在于通过GET提交的表单中,同一页面作为ActionResult返回。所以这是我的问题,一旦表单提交,我需要下拉来维护它们的值以及填充相应的选项列表。
到目前为止,我的想法是解析查询参数并以这种方式设置值。我不知道如何重新填充第二个下拉列表。
注意这是一个简化的示例,实际上我有一大堆下拉链接到几个级别,所以我需要一个通用的解决方案。
答案 0 :(得分:0)
完成此操作后,每次调用操作时,都需要重建模型中的值列表。然后,您的模型还会存储所选的值,该值会自动保留。
这是一个地址控件的例子,我有一个状态下拉。
首先,我的模特
public class AddressModel
{
[Required(ErrorMessage = "Address is required")]
[DisplayName("Address Line 1")]
public string Address1 { get; set; }
[DisplayName("Address Line 2")]
public string Address2 { get; set; }
[Required(ErrorMessage = "City is required")]
[DisplayName("City")]
public string City { get; set; }
[Required(ErrorMessage = "State is required")]
[DisplayName("State")]
public string State { get; set; }
[Required(ErrorMessage = "Zip code is required")]
[DisplayName("Zip Code")]
[StringLength(5, ErrorMessage = "{0} must be five digits.")]
[RegularExpression(@"\d{5}", ErrorMessage = "{0} must be five digits.")]
public string ZipCode { get; set; }
public Dictionary<string, string> States { get; set; }
public SelectList StatesSelectList
{
get
{
return new SelectList(States, "Value", "Key");
}
}
}
以下是我的行为,除了重要部分外,其余部分都已省略
public ActionResult DoSomething()
{
var model = new AddressModel()
{
States = GetStateList();
};
return View(model);
}
[HttpPost]
public ActionResult DoSomething(AddressModel model)
{
if (ModelState.IsValid)
{
//do stuff here
}
model.States = GetStateList();
return View(model);
}
以下是我在视图中的表现
<%: Html.LabelFor(x => x.State)%>
<%: Html.DropDownListFor(x => x.State, Model.StatesSelectList)%>
<%: Html.ValidationMessageFor(x => x.State)%>
因为属性AddressModel.State
绑定到控件,所以每次调用post操作时都会保留其值。