В ASP.NET MVC с Spark View Engine при ошибке отправки формы почему я получаю ресурс 404 не найден?

Мой взгляд:

/ Пользователь /EditUserName/2/ меня

<viewdata model="EditUserNameViewData" />
<form action="~/User/EditUserName" method="post" class="span-15 last">
!{Html.TextBox("newUserName")}
<Submit id='"chooseNewName"' value='"Choose new name"' />
</form>

Действия контроллера:

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult EditUserName(int id)
{
 EditUserNameViewData vd = new EditUserNameViewData();
 vd.ExistingName = _userRepository.Get(id).UserName;
 return View("EditUserName", vd);
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditUserName(string newUserName)
{
 try
 {
  // fails
 }
 catch(RulesException errors)
 {
  errors.AddModelStateErrors(ModelState, string.Empty);
  return View();
 }
}

обратный View(), кажется, не работает, поскольку он перенаправляет на

/ Пользователь / EditUserName

и дает мне ошибку 404. WTF? Я использую xVal для проверки, и все, что с этой стороны работает, просто не может заставить его снова отобразить предыдущую страницу с информацией, введенной пользователем, отображенной в поле. Кто-нибудь знает, что я делаю не так? Это сводит меня с ума!

редактировать

Я не уверен, что это ошибка в Spark или что там происходит. Как только я добавляю страницу EditUserName.aspx, я больше не получаю ошибку 404, и она работает правильно, повторное отображение страницы не вызывает проблем??? Как, черт возьми, другие люди не сталкиваются с этой проблемой? Я прочитал все, что мог найти, и не вижу ничего плохого в том, что я делаю. Почему это работает с движком обычного просмотра? Поэтому я не хочу переключаться на использование другого только для пользовательского ввода, но я чувствую, что у меня нет другого выбора здесь.

Посмотреть:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<form action="/User/EditUserName/<%= ((EditUserNameViewData)ViewData.Model).User.Id %>/<%= ((EditUserNameViewData)ViewData.Model).User.UserName %>" method="post" class="span-15 last">
<input type="text" id="newUserName" name="newUserName" />
<input type="submit" id="chooseNewName" value="Choose new Name" />
</form>

1 ответ

Решение

Я звонил Html.RenderAction в моей главной странице. Я "публиковал" свою форму, но у моего метода действия был атрибут [AcceptVerbs(HttpVerbs.Get)] - это приводило к ошибке 404, которая не была найдена, и, очевидно, это была моя ошибка. Супер рад, что я понял это, но черт, что боль.

Другие вопросы по тегам