如何实现每个页面上都可见的表单(登录)?

时间:2013-03-25 03:24:00

标签: asp.net-mvc vb.net asp.net-mvc-4 forms-authentication

假设我希望我的_Layout包含登录表单而不是默认的单独登录视图。我该怎么做?搜索周围给了我非常模糊/不确定的答案。

 ___________________________________
|  _______________________________  |
| |  Logo                  _____  | |
| |                       |     | | |
| |                       |Login| | |
| |                       |_____| | |
| |_______________________________| |
|                                   |
|  Content                          |
|                                   |
|                                   |
|              Footer               |
|___________________________________|

目前我已经创建了LoginController和相应的LoginViewModel来处理给定的用户名/密码组合。然后是POSTSLoginController/Index的表单。这个解决方案充满了问题。例如,如何为_Layout提供正确的模型?我如何进行验证?如何处理ReturnUrl

为每个继承的单个模型创建一个抽象类,然后将其提供给_Layout,似乎很难看。

1 个答案:

答案 0 :(得分:1)

不是最干净的解决方案:

表单本身提交给指定的控制器/操作:

@Using Html.BeginForm("Login", "Account")
    ...
End Using

控制器只有HTTPPOST操作:

Public Class AccountController
    ' POST: /Account/Login
    <HttpPost>
    Function Login(ByVal viewModel as LoginViewModel) As ActionResult
        WebSecurity.Login(viewModel.Username, model.Password, False)
        TempData("LoginViewModel") = viewModel
        Return RedirectToLocal(viewModel.ReturnUrl)
    End Function
End Class

然后在我的_Layout中,我包含登录部分:

@Code
    Dim model As LoginViewModel
    If TempData("LoginViewModel") IsNot Nothing Then
        model = TempData("LoginVieWModel")
    Else
        model = New LoginViewModel
    End If
    Html.RenderPartial("_LoginPartial", model)
End Code