0

ASP.NET、MVC3、Razor を使用しています。私のサイトでは、ユーザーがいつでもログインできるすべてのページ (上部ヘッダー) にログインフォームがあります。この問題は、別のフォームを含む別のページが表示されたときに発生します。それを実装する方法がわかりません。私はたくさん試しましたが、私の問題を解決するには非常に小さな例が必要だと思います. この例は、登録フォームとログイン フォームが同じページにあるような単純なもので、すべての検証やその他のものは別々に機能します。ログインフォームと登録フォームは、部分的なビューでも、誰かが提案できる再利用可能なものでもかまいません。

_Register.cshtml(共有ビュー)のコードは次のとおりです。

@model MVCRnD.Models.RegisterModel

@using (Html.BeginForm("Register","Account")) {

}

上記の共有ビューを配置した about.cshtml のコード

@Html.Partial("_Register")

アカウント コントローラーのコード

[HttpPost]

public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            MembershipCreateStatus createStatus;
            Membership.CreateUser(model.UserName, model.Password, model.Email, null,   null, true, null, out createStatus);

            if (createStatus == MembershipCreateStatus.Success)
            {
                FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("", ErrorCodeToString(createStatus));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

部分ビュー、つまり登録フォームは正常にレンダリングされています。しかし、送信ボタンをクリックすると、フォーム全体が投稿されますが、実際には正しいレジスタ /Account/Register に移動します。しかし、私は同じページにいたいので、他のフォームには行きません。完全なコードを送信しますか? どこかにアップロードして、リンクを送ります。

4

1 に答える 1

0

問題が発生している理由はわかりませんが、同じページに 2 つのフォームを配置することは、使用するサーバー側の言語に関係なく、非常に一般的な方法です。

@using (Html.BeginForm("Logon", "Account")) {
   ...
}

@using (Html.BeginForm("Register", "Account")) {
   ...
}

つまり、次のようになります。

<form action="/Account/Logon" method="post">        
   ...
</form>

<form action="/Account/Register" method="post">        
   ...
</form>
于 2012-06-05T17:51:30.793 に答える