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

StackOverflow https://stackoverflow.com/questions/1768046

Вопрос

Мой взгляд:

/Пользователь/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();
 }
}

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

/Имя пользователя/EditUserName

и выдает мне ошибку 404.ВТФ?Я использую 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>
Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top