ASP.NET MVC母版页中的登录控件

3

我有一个ASP.NET MVC 2网站,我想在主页面中放置登录控件。我希望任何验证错误消息也出现在主页面上。我该如何做?如果我像这样做:

<% using (Html.BeginForm("LogOn", "Account", FormMethod.Post))  {  %>

  <%= Html.LabelFor(d => d.UserName)%>:
  <%= Html.EditorFor(d => d.UserName)%>

  <%= Html.LabelFor(d => d.Password)%>:
  <%= Html.Password("Password")%>

  <input type="submit" value="Login" />

  <%= Html.ValidationSummary() %>

<% } %>

当我调用账户控制器方法时,一切都很顺利。但是,当我从该方法返回View()时,我会收到一个错误,指出不存在名为“LogOn”的视图。我该如何达到我预期的结果。

2个回答

1
当您调用LogOn操作时,除了用户名和密码外,您还可以传递一个返回URL,成功登录后它将重定向到该URL而不是返回视图。

你的意思是在方法中返回 Redirect(returnUrl) 吗?虽然这会带我到正确的页面,但它会丢失包括验证错误消息在内的 ModelState。 - Jacob
将任何状态放入 TempData 并进行重定向。 - Darin Dimitrov
我会记住这个的。这应该可以工作,但似乎有点像一个变通方法。在接受答案之前,我要等待看看是否有更符合MVC框架自然的解决方案。 - Jacob
我决定采用TempData建议。哦,好吧。 - Jacob

0

我很不想问一个显而易见的问题,但从您的帖子中并不清楚:您实际上是否在“Views”文件夹下的“Account”文件夹中拥有一个“LogOn”视图?

如果您只是从操作返回View(),它将查找与操作同名的视图(在本例中为“LogOn”)

嗯...您可以从登录控制器中简单地返回任何View:您将如何获取ViewModel传递给该视图等等?

最多可以从请求中获取引荐URL。然后确定控制器/操作并返回RedirectAction()。但是这次包含了模型错误。

我还能想到两件事:

  1. 将您的用户登录控件合并到iframe中。您需要将部分视图升级为完整视图。

  2. 使用jQuery

    $.get(url,null, function(result) { $(loginDiv).html(result);
    });

发送登录操作,然后从登录控制器返回PartialView("LogOn");

无论哪种方式,都会有部分页面提交,页面上的其余内容不会更改。


我不想进入登录视图。如果返回View()时它不存在,我会收到错误提示。如果我创建了该视图,则会跳转到该页面。如果有任何验证错误,我希望它返回到原始页面。 - Jacob
感谢您提供的额外建议。 - Jacob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接