Значения модели не отображаются обновлены в представлении после POST - PullRequest
2 голосов
/ 23 декабря 2011

У меня есть следующий простой (для целей вопроса) контроллер / действие:

public ActionResult Edit(int id)
{
    User user = repository.GetUser(id);
    return View(user);
}

[HttpPost]
public ActionResult Edit(User user) 
{
    user.Name = user.Name.ToUpper();
    return View(user);
}

, и представление было сгенерировано как редактирование для пользователя с использованием регулярных шагов в VS

.Проблема, с которой я сталкиваюсь, заключается в том, что все, что было введено в текстовое поле «Имя», будет отображаться пользователю, но без заглавных букв.Я проверил, и действие Edit для POST выполняется, и значение user.Name становится UPPER CASE, но .TextBoxFor по-прежнему использует значение, введенное пользователем, которое находится в нижнем регистре.

Я также проверил, что если янапечатайте (без использования любого Html Helper) значение Model.Name после POST, оно будет в верхнем регистре, как я хотел бы, чтобы Html.TextBoxFor вел себя.

Это ошибка MVC?

Есть ли способ заставить эту работу работать так, как я хочу, это означает, что действие / контроллер - это часть головоломки, которая решает значения данных для представления, а не представления, используя значения в объекте запросаи игнорируя изменения, которые мог сделать контроллер?

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

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Используйте RedirectToAction и передайте Id для пользователя, это не ошибка, это поведение POST

Обновление: вам нужно сохранить информацию до RedirectToAction, как сказано в Dismissile, или использовать TempData, если выне хочу упорствовать.

[HttpPost]
public ActionResult Edit(User user) 
{
    user.Name = user.Name.ToUpper();
    return RedirectToAction("Edit", new { id = user.id });
}
0 голосов
/ 21 июня 2013

Вы можете использовать ModelState.Remove (nameOfProperty) как:

[HttpPost]
public ActionResult Edit(User user) 
{
    ModelState.Remove("Name");
    user.Name = user.Name.ToUpper();
    return View(user);
}

Это будет работать.

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