MVC3 DropDownListFor выбранное значение не изменяется, когда установлено в действии обратной передачи - PullRequest
1 голос
/ 25 ноября 2011

Я прочитал здесь много постов, касающихся выпадающих выпусков выбранных значений (не отображаются и т. Д. И т. Д.), Но у меня проблема противоположная.

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

My View:

@Model.PspSourceModel.PayAccount.PaymentProviderId
<br />
@Html.DropDownListFor(
        x => x.PspSourceModel.PayAccount.PaymentProviderId,
            new SelectList(Model.PspSourceModel.PaymentProviders, "Value", "Text", "-- please select --"),
    "-- please select --"

Мой контроллер:

// I've tried forcing the selected value id here - doesn't effect the dropdownlist still?
pspVM.PspSourceModel.PayAccount.PaymentProviderId = 1;

return (View(pspVM));

Моя веб-страница показывает:

1 (the id I set in the Action)

dropdownlist with the id=6 or whatever value was chosen prior to submitting the form.

Из вопросов и ответов по SO и более широкой сети я думал, что выпадающий список, кажется, привязан к выбранному вами идентификатору, но как мне переопределить это, чтобы сбросить выпадающий список на «пожалуйста, выбирайте» каждый раз?

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 25 ноября 2011

Фундаментальная проблема здесь заключается в том, что когда MVC повторно связывает форму при обратной передаче, он использует не Model, а ModelState, поэтому вы можете изменять свою модель столько раз, сколько захотите, но будет использоваться только привязанный ModelState.Вы пробовали любой из этих методов на ModelState?

 public bool Remove(string key);
 public void SetModelValue(string key, ValueProviderResult value);
0 голосов
/ 25 ноября 2011

В своем действии на обратную передачу вы можете обработать текущее значение, как вам нужно, и установить идентификатор модели и вызвать представление;

[HttpPost]
public ActionResult Index(ModelClass viewModel)
{
  // Process Value

  viewModel.PspSourceModel.PayAccount.PaymentProviderId = 6;
  return View("Index", viewModel);
}

Или вы можете установить значения по умолчанию для вашего HttpGet и вызвать результат RedirectToAction в своем сообщении.

[HttpGet]
public ActionResult Index()
{
  // Set the default values; the following is a rough example, and won't work.
  var viewModel = new ModelClass
  {
    PspSourceModel.PayAccount.PaymentProviderId = 6
  }

  return View("Index", viewModel);
}

[HttpPost]
public ActionResult Index(ModelClass viewModel)
{
  // Process Value

  return RedirectToAction("Index");
}

Надеюсь, это понятно, если вам нужна дополнительная помощь, пожалуйста, дайте мне знать.

Мэтт

...