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 に答える