我的观点:
/用户/编辑用户名/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() 似乎不起作用,因为它重定向到
/用户/编辑用户名
并给我一个 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>