Не зацикливайтесь на абстракциях, с момента рендеринга страницы до момента вызова метода контроллера вы работаете только в HTML и HTTP.
Если вы хотите отправить сообщение обратнодругой метод, есть множество способов сделать это.У вас может быть несколько HTML-форм на вашей странице, или вы можете использовать что-то вроде jQuery для выполнения публикации.То, какое действие контроллера забирает ваше сообщение и какие данные отправляются обратно, определяется формой на странице HTML и ее содержимым.Обработчики MVC заберут запрос и попытаются привязать URL-адрес запроса и его содержимое к одному из доступных действий, которые ему соответствуют.
Чтобы «опубликовать модель», необходимо отправить данные обратно вподходящее действие таким образом, чтобы модель-связыватель могла его прочитать.Это могут быть данные JSON (если вы используете MVC 3) или форма с парами имя-значение.Однако контроллер ничего не знает о странице, которая запрашивает данные, или о том, как они были созданы.Он даже не знает, выполняется ли запрос страницей.
Вы можете попробовать это сами, создав обычную HTML-страницу с формой, настроенной для публикации по URL-адресу одного из ваших контроллеров MVC.Пока имена полей формы совпадают с именами свойств в аргументе действия вашего контроллера, MVC будет связывать его и вызывать действие.
Если у вас сложные представления, вы можете обнаружить, что jQuerypost - это путь, с некоторыми клиентскими методами, которые собирают данные со страницы и создают объекты JSON для отправки обратно.Использование этого метода дает вам очень точный контроль над тем, какие данные отправляются обратно, тогда как с формами у вас есть ограничения (например, перекрывающиеся данные и т. Д.).
Edit - ответ на комментарий
Вот пример, которыйиспользует только необработанный HTML, чтобы показать очень простой случай:
Public Class HomeController
'Other action methods...
<HttpPost()>
Function SayHello(myName As String) As ActionResult
Return Content("Hello " & myName)
End Function
End Class
и HTML-форму (я добавил это в представление индекса, но оно может пойти куда угодно)
<form action="/Home/SayHello" method="post">
<input type="text" name="myName" />
<input type="submit" />
</form>
I 'Мы установили имя на <input>
в соответствии с именем параметра, что дает MVC руку помощи.Хотя есть только 1 значение, отправленное обратно, я мог бы назвать это как-то еще.Однако, если бы я сделал это:
<form action="/Home/SayHello" method="post">
<input type="text" name="aName" />
<input type="text" name="anotherName" />
<input type="submit" />
</form>
... тогда связыватель модели не будет знать, какое значение он должен использовать, и вы получите значения, которые не были установлены должным образом.
Изменитьоднако для этого:
<form action="/Home/SayHello" method="post">
<input type="text" name="myName" />
<input type="text" name="anotherName" />
<input type="submit" />
</form>
... и связыватель модели теперь может использовать имя, чтобы правильно определить, какое значение использовать, а какое игнорировать.
В случае сильногоТипизированные действия:
Public Class HomeController
<HttpPost()>
Function SayHello(person As SimplePerson) As ActionResult
Return Content("Hello " & person.FirstName)
End Function
End Class
Public Class SimplePerson
Public Property FirstName As String
Public Property Surname As String
End Class
Вам необходимо иметь имена форм, соответствующие именам свойств.Моя форма aName / anotherName вернула бы правильную форму, но связыватель модели не установил бы никаких свойств, потому что он не знает, что к чему.Это, однако, будет работать:
<form action="/Home/SayHello" method="post">
<input type="text" name="FirstName" />
<input type="text" name="Surname" />
<input type="submit" />
</form>