我通过弹出窗口(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="/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>
将Html.BeginForm()
更改为Ajax.BeginForm()
,则响应将在弹出窗口中呈现,而不是在整个页面中呈现。
从estetic的角度来看,您还应该将Html.ValidationSummary
从注册表中移出,因为它会随着Html.ValidationMessageFor
一起更新错误,并且您不需要将该信息加倍,最好将其放在窗体之前。Html.ValidationSummary
应该用于显示控制器的错误。