MVC3: обновленное значение не отображается в текстовом поле после публикации - PullRequest
1 голос
/ 25 августа 2011

Я показываю коллекцию данных на моей странице.Я показываю метку и текстовое поле для каждой строки.

Ниже приведен пример кода из моего представления:

@using (Html.BeginForm())
{
   <input type="submit" value="Ok" />
   @for (int index = 0; index < Model.Persons.Count; index++ )
   {
      @Model.Persons[index].Name
      @Html.TextBoxFor(m => Model.Persons[index].Amount)
   }
}

В действии «Post» я обновляю сумму (скажем, увеличивается на 5).

    [HttpPost]
    public ActionResult Persons(PersonList presenter)
    {

        for (int index = 0; index < presenter.Persons.Count; index++)
        {
            presenter.Persons[index].Amount += 5;
        }
        return View(presenter);
    }

Эта обновленная сумма не отображается на странице.Однако, если я использую приведенный ниже код, то он отображается правильно, например

@Model.Persons[index].Amount

или

<input type="text" id=@("Persons_" + index + "__Amount") name="Persons[@index].Amount " value="@Model.Persons[index].Amount" ></input>

Я хотел бы объяснить причину такого поведения, почему это происходит?

Буду признателен за любую помощь.

Ответы [ 2 ]

5 голосов
/ 10 февраля 2012

Перед обновлением значений просто добавьте ModelState.Clear (), обновите свою коллекцию и верните ее.

2 голосов
/ 25 августа 2011

Опубликованные значения переопределяют значения viewmodel.У меня был обходной путь для этого перед использованием ...

ModelState["Field"].Value = new ValueProviderResult("NewValue", "Field", CultureInfo.InvariantCulture);

Я полагаю, в вашем случае (и я не совсем уверен, что ваш объект) что-то вроде

PersonCollection persons = (PersonCollection)ModelState["Persons"].Value.RawValue;
persons[index].Amount += 5;
ModelState["Persons"].Value = new ValueProviderResult(persons, "Persons", CultureInfo.InvariantCulture);
...