Помощь в сопоставлении ссылок ActionLink с методами в контроллерах (ASP.NET MVC2)

Я работаю над своим первым проектом MVC и до сих пор не могу его полностью понять. Я столкнулся с этой проблемой:

У меня это есть в моем представлении (Home / Index.aspx)

<% using (Html.BeginForm()) { %>
<fieldset>
<p>
    <%: Html.TextBox("A")%> 
    <%: Html.TextBox("B") %>
    <%: Html.ActionLink("Submit", "Create", "Home")%> 
</p>
</fieldset>
<% } %>

У меня это в моем контроллере (Controllers / HomeController.cs)

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection formValues)
{
    return View("Index");
}

Я не менял маршруты по умолчанию в global.asx

Когда я нажимаю "Отправить", я получаю сообщение об ошибке «Ресурс не найден». Однако, если я изменю ActionLink на

<input type="submit" value="Save" />

и метод в контроллере:

[AcceptVerbs(HttpVerbs.Post)]
 public ActionResult Index(FormCollection formValues)
 {
     return View("Index");
 }

работает нормально.

Я немного сбит с толку, потому что, если я указываю точное имя метода действия и контроллер в ActionLink (‹%: Html.ActionLink (« Submit »,« Create »,« Home »)%>), зачем ему независимо от того, назову ли я этот метод Create или Index?


person Prabhu    schedule 24.09.2010    source источник


Ответы (1)


У вас есть [AcceptVerbs(HttpVerbs.Post)], который ограничивает его запросами HTTP POST. Поскольку ссылка на действие является GET, она не использует ваш метод. Предположительно у вас есть два метода индекса, один из которых не имеет этого атрибута и принимает запросы GET.

person Kirk Woll    schedule 24.09.2010
comment
Спасибо ... на самом деле я понял, что мой ActionLink не работает ни в одном из сценариев. Он работает только тогда, когда у меня есть ‹input type = submit value = Save /›. - person Prabhu; 24.09.2010
comment
@Prabhu, ну да, в этом есть смысл. Это то, что предполагается делать [AcceptVerbs(HttpVerbs.Post)]. Удалите его, и он будет работать. - person Kirk Woll; 24.09.2010
comment
Хорошо, у меня есть вопрос ... в том же представлении мне нужно иметь две кнопки публикации. Скажем, например, что-то вроде StackOverflow - в том же представлении пользователи могут либо CreateAnswer, либо CreateComment. Как вы справляетесь с этим с помощью MVC, поскольку нет возможности указать имя метода в ‹input type = submit ..? - person Prabhu; 24.09.2010
comment
Я нашел это: stackoverflow.com/questions/442704/ - person Prabhu; 24.09.2010
comment
@Prabhu, предпочтительный способ справиться с этим - использовать два полностью отдельных элемента ‹form› (BeginForm / EndForm), по одному для каждой кнопки. (И если SO является подходящим аналогом, это будет работать отлично, поскольку текстовое поле комментария и текстовое поле ответа взаимоисключают. - person Kirk Woll; 24.09.2010
comment
@Prabhu, да, похоже, эта ссылка направит вас в правильном направлении. - person Kirk Woll; 24.09.2010