2

ログインフォームを使用して 1 つの Web サイトを作成しました。最初に、アカウント/ログオンの下でテスト用にログインフォームを作成します。次に、すべてのページを変更してログインを表示する必要があります。だから私は 1 つのパーシャルを作成し、次の _Layout.cshtml で呼び出します。

<div id="logindisplay">
  @{ Html.RenderPartial("_LogOnPartial");  }
</div>

_LogOnPartial.cshtml:

@model HOP2013.Models.LogOnModel

@{
  ViewBag.Title = "Log On";
 }


 @if(Request.IsAuthenticated) {
<text>Welcome <b>@Context.User.Identity.Name</b>!
[ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>
  }
   else {
       @: @Html.ActionLink("Log On", "LogOn", "Account") 
    }
          @Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")

   @using (Html.BeginForm()) {

    <fieldset>
        <legend>Account Information</legend>
        <div id="user" class="user">
        <div class="editor-label">
            @Html.LabelFor(m => m.UserName)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(m => m.UserName, new { @title = "UserName" })
            @Html.ValidationMessageFor(m => m.UserName)
        </div>
        </div>
        <div id="password" class="password">
        <div class="editor-label">
            @Html.LabelFor(m => m.Password)
        </div>
        <div class="editor-field">
            @Html.PasswordFor(m => m.Password, new { @title = "UserName" })
            @Html.ValidationMessageFor(m => m.Password)
        </div>
        <div class="editor-label">
            @Html.CheckBoxFor(m => m.RememberMe)
            @Html.LabelFor(m => m.RememberMe)
        </div>
        </div>

        <p>
            <input type="submit" class="login" value="Log On" />
        </p>

        <p>New @Html.ActionLink("Register", "SignUp", "Account")Here</p>
    </fieldset>

 }

しかし、ログインできません。別のページ (LogOn.cshtml) でログインすると、正常にログが記録されていることを意味します。なぜそれが起こっているのかわかりません..誰かが私を明確にしてください。

4

1 に答える 1

4

フォームでコントローラー アクションを明示的に指定する必要があります。

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

その理由は、Html.BeginForm()パラメーターなしでヘルパーを使用すると、フォームのアクションとして現在の URL が使用されるためです。ただし、このビューは任意のコントローラーから提供される可能性があるため、現在の URL はまったく異なるものになる可能性があります。フォームを送信するコントローラー アクションを明示的に指定することにより、ヘルパーは適切なアクション属性を生成します。

<form action="/Account/LogOn" method="post">
    ...
</form>
于 2013-04-08T10:56:07.887 に答える