Данные MVC 3 POST и поле Id - PullRequest
       4

Данные MVC 3 POST и поле Id

1 голос
/ 05 марта 2012

У меня строго типизированный вид бритвы для модели в моем проекте MVC 3. В основном это для редактирования модели.

Модель содержит поле Id для ключа базы данных и некоторые другие строковые поля (это модель представления и все, но это не главное).

В представлении у меня просто есть форма, кнопка отправки и ничего больше. Когда View публикуется в контроллере, модель в контроллере имеет все поля пустыми, КРОМЕ поля Id, которая, по-видимому, автоматически заполняется.

Как и где поле Id заполняется в модели, не имея соответствующего элемента input для него в представлении.

Это, вероятно, глупый вопрос, но я был бы признателен даже за ссылку на то, что я должен прочитать. Спасибо.

Ответы [ 3 ]

4 голосов
/ 05 марта 2012

Бьюсь об заклад, он приходит из URL-адреса в качестве параметра маршрута.

Например, у вас есть следующий контроллер:

public class HomeController: Controller
{
    public ActionResult Index(int id)
    {
        vqr model = GetModel(id);
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        // the model.Id property will be automatically populated here
        // because the request was POST /home/index/123
        ...
    }
}

и следующий вид:

@model MyViewModel
@using (Html.BeginForm())
{
    <button type="submit">OK</button>
}

Теперь вы переходите к GET /home/index/123 и получаете следующееразметка:

<form action="/home/index/123" method="post">
    <button type="submit">OK</button>
</form>

Обратите внимание на атрибут action формы?Вот откуда идентификатор.По сути, помощник Html.BeginForm() использует текущий URL-адрес при создании атрибута действия, и поскольку текущий URL-адрес /home/index/123, это то, что используется.

И потому, что если вы оставили маршруты по умолчанию в вашем Global.asax, маркер маршрута {id} используется в конце URL-адреса, механизм связывания модели по умолчанию успешно связывает его со свойством Id вашей модели представления.

1 голос
/ 05 марта 2012

Возможно, вы переходите по URL-адресу, аналогичному следующему: / MyObject / Edit / 15

Затем возвращается страница с пустой формой.

Что происходит дальше, если у вас есть HTML.BeginForm (), который отправляет BACK в / MyObject / Edit / 15

Теперь из-за того, что сообщение имеет тот же формат, ваши правила маршрутизации выбирают «15» и связывают его с вашим идентификатором.

0 голосов
/ 05 марта 2012

Вы добавили поле идентификатора как скрытое поле?

например. @ Html.HiddenFor (x => x.ID)

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