2016-05-09 6 views
0

オーチャードとASP.NET MVCが初めてです。私はユーザのログインプロセスを無効にしようとしているので、専用ログインページ(デフォルトプロセス)に行くのではなく、それらをログインするユーザメニューからドロップダウンフォームを得る。私はLogOn.cshtmlの私のカスタムテーマで上書きを作成したおよびUser.cshtml。次のようにコードがある:Requested URL: /OrchardLocal/Contents/Item/LogOnオーチャードCMSのドロップダウンログインを作成しようとしています

//User.cshtml 
@using System.Web.Mvc; 
@using Orchard.ContentManagement; 

<nav class="navbar navbar-default navbar-fixed-top"> 
    <div class="container-fluid"> 
     <ul class="nav navbar-nav pull-right"> 
     @if (WorkContext.CurrentUser != null) { 
      <li class="dropdown"> 
       <button id="userDropdown" class="btn btn-primary navbar-btn dropdown-toggle" data-toggle="dropdown"> 
        Welcome @Html.ItemDisplayText(WorkContext.CurrentUser) <span class="caret"></span> 
       </button> 
       <ul class="dropdown-menu"> 
        <li> 
         @Html.ActionLink(T("Change Password").ToString(), "ChangePassword", new { Controller = "Account", Area = "Orchard.Users" }) 
        </li> 
        <li> 
         @Html.ActionLink(T("Sign Out").ToString(), "LogOff", new { Controller = "Account", Area = "Orchard.Users", ReturnUrl = Context.Request.RawUrl }, new { rel = "nofollow" }) 
        </li> 
        @if (AuthorizedFor(Orchard.Security.StandardPermissions.AccessAdminPanel)) { 
         <li class="divider"></li> 
         <li> 
          @Html.ActionLink(T("Dashboard").ToString(), "Index", new { Area = "Dashboard", Controller = "Admin" }) 
         </li> 
        } 
       </ul> 
      </li> 
     } 
     else { 
      <li class="dropdown"> 
       <button class="btn btn-primary navbar-btn dropdown-toggle" data-toggle="dropdown"> 
        Sign In <span class="caret"></span> 
       </button> 
       <ul class="dropdown-menu dropdown-menu-right"> 
        <li> 
         @Display.LogOn() 
        </li> 
       </ul> 
      </li> 
     } 
    </ul> 
</div> 

//LogOn.cshtml 
@using System.Web.Mvc; 
@using Orchard.ContentManagement; 

<div> 
@using (Html.BeginFormAntiForgeryPost(Url.Action("LogOn", new { ReturnUrl = Request.QueryString["ReturnUrl"] }))) { 
    <fieldset class="login-form group"> 
     <legend>@T("Account Information")</legend> 
     <div class="form-group"> 
      <label for="username-email">@T("Username")</label> 
      @Html.TextBox("userNameOrEmail", "", new { id = "username-email", autofocus = "autofocus", @class = "validate[required]" }) 
      @Html.ValidationMessage("userNameOrEmail") 
     </div> 
     <div class="form-group"> 
      <label for="password">@T("Password")</label> 
      @Html.Password("password", null, new { @class = "validate[required]" }) 
      @Html.ValidationMessage("password") 
     </div> 
     <div class="checkbox"> 
      <label class="forcheckbox" for="remember-me"> 
       @Html.CheckBox("rememberMe", new { id = "remember-me" }) @T("Remember Me") 
      </label> 
     </div> 
     <div class="form-group"> 
      <button class="primaryAction" type="submit">@T("Sign In")</button> 
     </div> 
    </fieldset> 
} 
</div> 

フォームがドロップダウンで罰金表示しますが、送信ボタンをクリックしたときに、私はHTTP 404エラーを取得します。

デフォルトのログインプロセスには別のビューが必要です。私は使用する既存のオーバーライドを把握しようとしていましたが、私はそれを見ていません。どんな助けでも大歓迎です。ありがとう。

答えて

1

あなたはこのような何かに

@using (Html.BeginFormAntiForgeryPost(Url.Action("LogOn", new { ReturnUrl = Request.QueryString["ReturnUrl"] }))) 

からフォームを変更することにより、適切にログインすることができるはずです。

@using (Html.BeginForm("LogOn", "Account", new { area = "Orchard.Users" /*other route values here*/ }, FormMethod.Post)) 
{ 
    @Html.AntiForgeryToken() 

    // ... your stuff here 
} 

これは、他のすべてのコントローラのアクションでも同じです。疑わしい場合:明示的に領域を指定してください。

+0

ありがとうございます!あなたの頭を壁にぶつけるよりも単純なことの方が悪いことはありません。 – Silinus

関連する問題