Динамические цепочки выпадающих при обновлении страницы - PullRequest
1 голос
/ 23 декабря 2010

У меня есть следующий сценарий. У меня есть 2 выпадающих. Параметры первого загружены в document.ready. Параметры для второго загружаются, когда пользователь делает выбор в первом раскрывающемся списке. Я использую jQuery для заполнения обоих, и все работает отлично.

Эти раскрывающиеся списки находятся внутри формы, отправленной через GET, и та же страница возвращается как ActionResult. Так что вот моя проблема: после отправки формы мне нужны раскрывающиеся списки, чтобы сохранить их значения и заполнить соответствующие списки параметров.

Моя идея до сих пор заключалась в том, чтобы разобрать параметры запроса и установить значения таким образом. Я не уверен, как заполнить второй выпадающий список.

* 1007.

1 Ответ

0 голосов
/ 23 декабря 2010

Когда я это сделал, каждый раз, когда вы вызываете действие, вам нужно перестраивать список значений в модели. Затем ваша модель также сохраняет выбранное значение, которое автоматически сохраняется.

Вот пример управления адресом, в котором у меня выпадающее состояние.

Сначала моя модель

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...