зарегистрироваться через всплывающее окно и передать результат в этом всплывающем окне - PullRequest
0 голосов
/ 27 января 2012

Я понял, регистрация и войти через всплывающее окно (Jquery UI Dialog).Это мой 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="/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);
        }

И, второй вопрос: если пользователь выполняет какую-либо операцию на сайте, требующую авторизации, то покажите экран входа в систему (если пользователь не авторизован).

Я пытался использовать атрибут Authorize, но не работает.

Спасибо.

ОБНОВЛЕНИЕ : Просмотр регистрации:

<%@ 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>

1 Ответ

0 голосов
/ 28 января 2012

Измените Html.BeginForm() на Ajax.BeginForm(), тогда ответ будет отображаться во всплывающем окне, а не на всей странице.

С эстетической точки зрения вам также следует переместить Html.ValidationSummary из формы реестра, поскольку она обновляется при ошибке вместе с Html.ValidationMessageFor, и вам не нужно удваивать эту информацию, лучше всегопоместите это перед формой.Html.ValidationSummary должно отображать ошибки контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...