我有这样的事情:
class AccountController : Controller
{
[HttpGet]
public ActionResult Login()
{...}
[HttpPost]
public ActionResult Login(LoginModel model)
{...}
}
现在,这很难解释:
对于每个发送的请求,我检查用户是否经过身份验证,如果没有,我会在我的页面中显示他们的登录窗口。我通过执行:@Html.Action("Login", "Account", new {})
来显示它。这个动作通常会返回一个partialView,所以我可以放入我的页面。
现在我解释有问题的用例:当用户注册自己时,他给我发回寄存器数据,当这个寄存器数据以某种方式坏了并且我在我的控制器中检测到它时,我将这些数据发送回用户,这样他就可以纠正本人。当我这样做时,我重新渲染发送给用户的页面,并通过这样做我第二次执行@Html.Action("Login", "Account", new {})
。但这次我在内存中有用户数据。所以模型绑定器认为,我没有请求[HttpGet] Login()方法,但它试图执行[HttpPost]版本。现在我认为最好的是改变这个动作的两个版本的名称。但也许有某种神奇的东西可以让我保持相同的名字并执行我想要的东西而不让模型绑定器来决定?