2012-01-27 3 views
0

登録を認識し、ポップアップウィンドウ(Jquery UIダイアログ)でログオンしました。 これは私のUserNavigation制御ポップアップ経由で登録し、このポップアップで結果を渡します

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#loginDialog").click(function() { 
      $.get("/Account/LogOn", 
       function (htmlResult) { 
        $("#logon").remove(); 
        $("#container").append(htmlResult); 
        $("#logon").dialog({ modal: true }); 
       } 
        ); 
      return false; 
     }); 

     $("#registerDialog").click(function() { 
      $.get("/Account/Register", 
       function (htmlResult) { 
        $("#registration").remove(); 
        $("#container").append(htmlResult); 
        $("#registration").dialog({ modal: true }); 
       } 
        ); 
      return false; 
     }); 
    }); 
</script> 

<div id="userNavigation"> 
    <% 
    if (Request.IsAuthenticated) 
    { 
    %> 
    <a href="https://stackoverflow.com/users/mr.freeman/profile" class="username"><span><%=Page.User.Identity.Name %></span><i class="icon iUser"></i></a> 
    <ul class="headLine_link"> 
     <li><a href="#">Profile settings</a></li> 
     <li> 
      <%= Html.ActionLink("Log off", "LogOff", "Account", null, new { @class = "exit" })%></li> 
    </ul> 
    <% 
    } 
    else 
    {%>  
    <ul class="headLine_link"> 
        <li><%=Html.ActionLink("Register", "Register", "Account", null, new {id = "registerDialog"})%></li> 
        <li><%=Html.ActionLink("Log On", "LogOn", "Account", null, new {id = "loginDialog", @class = "username" })%></li> 
       </ul> 
    <%}%> 
</div> 

にですが正常に動作しています。しかし、登録が成功したら、同じウィンドウにメッセージを表示したい。これどうやってするの?

は、これは私のコントローラです:

[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); 
     } 

そして、2つ目の質問:ユーザーが認証を必要とするサイト上でいくつかの操作を行った場合(ユーザーが許可されていない場合)、その後、ログイン画面が表示されます。

私はAuthorize属性を試してみましたが、動作しません。

ありがとうございました。

UPDATE:登録ビュー:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<DT.KazBilet.Web.Portal.Models.RegisterModel>" %> 
<div id="registration"> 
    <h2>Create new account</h2> 


    <script src="<%: Url.Content("~/Scripts/jquery.validate.min.js") %>" type="text/javascript"></script> 
    <script src="<%: Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js") %>" type="text/javascript"></script> 

    <% using (Html.BeginForm()) { %> 
     <%: Html.ValidationSummary(true, "Error. Try again.") %> 
     <div> 
      <fieldset> 
       <legend>Account Information</legend> 

       <div class="editor-label"> 
        <%: Html.LabelFor(m => m.UserName) %> 
       </div> 
       <div class="editor-field"> 
        <%: Html.TextBoxFor(m => m.UserName) %> 
        <%: Html.ValidationMessageFor(m => m.UserName) %> 
       </div> 

       <div class="editor-label"> 
        <%: Html.LabelFor(m => m.Email) %> 
       </div> 
       <div class="editor-field"> 
        <%: Html.TextBoxFor(m => m.Email) %> 
        <%: Html.ValidationMessageFor(m => m.Email) %> 
       </div> 

       <div class="editor-label"> 
        <%: Html.LabelFor(m => m.Password) %> 
       </div> 
       <div class="editor-field"> 
        <%: Html.PasswordFor(m => m.Password) %> 
        <%: Html.ValidationMessageFor(m => m.Password) %> 
       </div> 

       <div class="editor-label"> 
        <%: Html.LabelFor(m => m.ConfirmPassword) %> 
       </div> 
       <div class="editor-field"> 
        <%: Html.PasswordFor(m => m.ConfirmPassword) %> 
        <%: Html.ValidationMessageFor(m => m.ConfirmPassword) %> 
       </div> 

       <p> 
        <input type="submit" value="Register" /> 
       </p> 
      </fieldset> 
     </div> 
    <% } %> 
</div> 

答えて

0

変更Html.BeginForm()Ajax.BeginForm()に、応答は、ポップアップではなく、ページ全体にレンダリングされます。

Html.ValidationMessageForとともにエラーが更新されるため、登録フォームからHtml.ValidationSummaryも移動してください。その情報を倍にする必要はありません。フォームの前に置くのが最もよいでしょう。 Html.ValidationSummaryはコントローラからのエラーを表示するためのものでなければなりません。

関連する問題