MVC: какой код вызывается при нажатии кнопки "отправить"?
Вопрос о MVC newbie; Я учусь, играя вокруг, а не Чтение руководства...:)
Я вижу, когда я создаю представление "Изменить", что в автогенерированном представлении есть кнопка "отправить":
<input type="submit" value="Save" />
Но какой код вызывается за кулисами для этого? В частности, модель, лежащая в основе этого представления, имеет свою собственную логику сохранения в коде, которую я бы хотел назвать. Как получить представление для вызова моего кода вместо того, чтобы какой-либо стандартный код вызывался невидимо за кулисами?
Ответы
Ответ 1
Он будет вызывать любой открытый метод действия, который действие формы указывает на ваш контроллер. Затем вы можете вызвать save в модели представления.
public virtual ActionResult Save(MyViewModel model) {
model.Save();
--- more code to do stuff here
}
Установите действие формы на MyController/Save
Вы также можете использовать using (Html.BeginForm...
в своем коде, чтобы указать форму на конкретный метод действий на определенном контроллере.
Ответ 2
Это не кнопка, которая определяет, что происходит, но сама форма. Кнопка типа submit (по одной форме) просто запускает отправку формы, которая обрабатывается самой формой.
Форма имеет действие - например:
<form name="input" action="users/save" method="post">
<!-- Form content goes here -->
<input type="submit" value="Submit" />
</form>
Действие - это URL-адрес, и происходит то, что браузер собирает значения всех полей в форме (<input...>
) и отправляет их указанному URL-адресу.
В ASP.NET формы MVC обычно определяются с помощью Html-помощников, поэтому создание URL-адреса для действия формы передается ASP.NET MVC. Для приведенного выше примера:
<% using(Html.BeginForm("Save", "Users")) %>
<% { %>
<!-- Form content goes here -->
<input type="submit" value="Save" />
<% } %>
Что в этом случае создаст url /users/save
, и форма отправит на этот url. Это в терминах вызовет маршрутизацию ASP.NET, которая будет обрабатывать URL-адрес /users/save
и разбивать его на куски, чтобы он знал, что он должен вызывать метод действия "Сохранить" в классе контроллера "Пользователи". Затем он прочитает все пары имени и имени входящего поля и попытается сопоставить их с именами параметров метода, если они есть.
Ответ 3
когда вы нажимаете кнопку "Отправить", запрос переходит к HTTp-модулю, который направляет его на соответствующее действие контроллера. когда редактируемое представление создается из шаблона, почтовый адрес формы такой же, как и в форме редактирования. Если вы посещаете /home/edit, вы можете увидеть следующий html в теге открытия формы
<form method="post" action="/home/edit">
у вас может быть другой метод действий, который принимает только сообщения, такие как
[HttpPost]
public ActionResult Edit(int id, ViewModel model)
{
//put your logic here handling submitted values
}
Атрибут HttpPost указывает, что он будет обрабатывать только почтовый запрос, а не запрос, используемый для визуализации формы
Ответ 4
он вызывает метод Action, определенный в части действия элемента формы
например:
<form action="/Account/LogOn" id="loginForm" method="post">
Действие LogOn в контроллере учетной записи будет вызываться в этой форме
Ответ 5
В ViewPage есть метод BeginForm using (Html.BeginForm()
вверху, который отобразит FormTag. Этот метод имеет перегрузку, которая принимает имя ActionName и имя контроллера. Таким образом, вы можете указать действие в своем контроллере, который должен быть вызван.