0

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

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

目前我已经创建了一个LoginController并对应LoginViewModel于处理给定的用户名/密码组合。然后表格POSTSLoginController/Index。这个解决方案充满了问题。例如,如何向_Layout? 如何执行验证?怎么处理ReturnUrl

为每个其他单个模型创建一个抽象类以继承,然后将其提供给_Layout,看起来很难看。

4

1 回答 1

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
于 2013-03-26T23:21:38.563 回答