Справка по сопоставлению ActionLinks с методами в контроллерах (ASP.NET MVC2) - PullRequest
0 голосов
/ 24 сентября 2010

Я нахожусь на моем первом проекте 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?

1 Ответ

2 голосов
/ 24 сентября 2010

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

...