我是ASP.MVC的新手.我的背景是在ASP.NET Web Forms中,我认为这是导致我混淆的原因.我知道"M"基本上代表数据源,"V"代表我正在请求的资源,"C"代表向最终用户显示的内容.但后来我感到困惑.
例如,我只是想创建一个登录屏幕.我设想用户访问" http://www.myapp.com/Account/Login ",他们将看到传统的登录屏幕.为此,我在Global.asax文件的RegisterRoutes方法中添加了以下内容:
routes.MapRoute(
"Login",
"{controller}/{action}",
new { controller = "Account", action = "Login", id = "" }
);
Run Code Online (Sandbox Code Playgroud)
登录操作执行,但这是我感到困惑的地方.你看,第一次加载登录屏幕时,我希望只显示一个用户名/密码字段.然后在帖子上,我希望表格得到验证和处理.为了做到这一点,我创建了以下方法:
public ActionResult Login()
{
bool isFormValid = ValidateForm();
if (isFormValid)
LoginUser();
else
ShowErrors();
return View();
}
Run Code Online (Sandbox Code Playgroud)
我的困惑在于Login操作.最初,没有数据.但下一次,我想验证数据.如何确定Action是否为回发?
谢谢!
处理此问题的最简单方法是使用两个操作:一个用于获取,一个用于发布.使用AcceptVerbs属性来控制根据方法调用哪个.顺便说一句,默认路由应该适用于这种情况,因为当提供控制器和操作时,它会按照您的预期进行定向.我认为这个场景也包含在项目模板中 - 您是使用模板还是空模板设置项目?
[AcceptVerbs( HttpVerbs.Get )]
public ActionResult Login()
{
}
[AcceptVerbs( HttpVerbs.Post )]
public ActionResult Login( string userName, string password )
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |