Странный выпуск MVC - PullRequest
       4

Странный выпуск MVC

0 голосов
/ 12 июня 2011

У меня есть этот код, и я не могу понять, почему он работает таким образом

У меня есть модель и представление, которое является произвольным и очень простым (но странным) контроллером

Вотмой контроллер:

public partial class RouteController : Controller
{
    [HttpGet]
    public virtual ActionResult Create()
    {
        Create create = new Create();
        return View("Create", create);
    }

    [HttpPost]
    public virtual ActionResult Create(Create route)
    {
        return Create();
    }
}

Первый метод create загружает представление как обычно.Когда представление отправляет обратно, оно запускает 2-е действие, которое запускает первое (как и ожидалось).Странная часть - это представление (повторно) загружено с моими ранее введенными данными с ошибками (если есть).Я не понимаю этого, потому что моя модель пуста.Я ожидал, что он отправит обратно с той же формой, как если бы он был загружен в первый раз, но возможно с ошибками.

Пожалуйста, объясните.

1 Ответ

1 голос
/ 17 июня 2011

Это нормальное поведение HTML-помощников, и оно разработано. Сначала они смотрят на значения, содержащиеся в ModelState, а затем в реальной модели. Если вы намереваетесь изменить некоторые значения модели в действии POST, вам необходимо сначала удалить их из состояния модели:

Например:

[HttpPost]
public virtual ActionResult Create(Create route)
{
    ModelState.Remove("SomeProperty");
    route.SomeProperty = "some new value";
    return View(route);
}

Если вы намереваетесь полностью изменить все, как в вашем примере, вы можете полностью очистить состояние модели:

[HttpPost]
public virtual ActionResult Create(Create route)
{
    ModelState.Clear();
    return Create();
}

Другая возможность - написать свои собственные помощники TextBoxFor, HiddenFor, CheckBoxFor, ..., которые будут использовать значение в модели, а не значение в состоянии модели. Или еще одна (не рекомендуемая) возможность:

<input type="text" name="SomeProperty" value="@Model.SomeProperty" />

Конечно, в этом случае проверка клиента, помимо прочего, предоставляемая стандартными помощниками, не будет работать.

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