页面刷新时动态链接下拉

时间:2010-12-23 20:36:40

标签: jquery asp.net-mvc ajax

我有以下情况。我有2次下降。第一个中的选项加载在document.ready上。当用户在第一个下拉列表中进行选择时,将加载第二个选项。我正在使用jQuery填充两者,一切都很好用。

这些下拉列表存在于通过GET提交的表单中,同一页面作为ActionResult返回。所以这是我的问题,一旦表单提交,我需要下拉来维护它们的值以及填充相应的选项列表。

到目前为止,我的想法是解析查询参数并以这种方式设置值。我不知道如何重新填充第二个下拉列表。

注意这是一个简化的示例,实际上我有一大堆下拉链接到几个级别,所以我需要一个通用的解决方案。

1 个答案:

答案 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操作时都会保留其值。