В 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, которая не была найдена, и, очевидно, это была моя ошибка. Супер рад, что я понял это, но черт, что боль.