这里是MVC的新手,我想让登录框在网站上的jquery对话框中工作,方法是将它放在母版页上。
我用一个对话框div包装了logOn.aspx表单并添加了一个按钮来打开对话框和一些jq
<button id="show-sign-in">Sign In</button>
<script type="text/javascript">
$(function () {
$("#dialog").dialog({
bgiframe: true,
autoOpen: false,
modal: true
});
$('#show-sign-in').click(function () {
$('#dialog').dialog('open');
});
</script>
<div id="dialog" title="User Login">...</div>
问题:
如果我使用RenderPartial将页面包含在master中,则控制器的ActionResult将不会捕获提交,除非url中包含/ Account。
Html.RenderPartial( “〜/查看/帐户/ LogOn.aspx”);
如果我使用Ajax请求包含它(如下),则提交会很好,但是如果登录尝试无效,页面会重定向到实际的LogOn页面(我想将它们返回到对话框)
<script type="text/javascript">
$(document).ready(function () {
$.ajax({
url: "/Account/LogOn",
cache: false,
success: function (html) {
$("#logindisplay").append(html);
}
});
});</script>
最重要的是,这是我在网络表单中使用ascx做了很多事情,我发现通过ajax获取和许多js做同样的事情很烦人,我接近这个完全错误了吗?有任何想法吗?
答案 0 :(得分:1)
您是否尝试过将LogOn.aspx移至共享文件夹?如果您期望跨多个控制器共享视图,那应该是什么?如果你将它渲染为局部,它也应该从ViewUserControl而不是默认的ViewPage派生。您可能还需要更新默认的BeginForm签名,以指定它需要转到帐户控制器和登录操作,因为您不再直接从LogOn()操作本身呈现它。
构建此方法的一种方法是使用LogOn视图呈现部分(共享)登录表单(LogonForm.ascx)。当登录请求通过AJAX请求进入时,只需将表单呈现为部分。如果它来自正常请求渲染整个视图。您的表单应指定它明确回发到帐户/登录操作。
答案 1 :(得分:0)
我很难理解你想要做什么,但如果你只需要一个用于登录的模态对话框,那么如果你向你的AJAX GET和POST添加一些查询字符串参数它应该可以正常工作?模式=真”。因为这就是您想要的 - 您希望您的登录表单能够以传统方式和模式对话框工作。在处理模态对话框时,它还应回发到模态,例如/ Account / LogOn /?modal = true。
此外,当您通过使用ASP.NET Forms身份验证登录时,我认为您不能在没有回发的情况下执行此操作。因此,即使您使用模态对话框,在关闭它之后,您仍然需要进行页面刷新。
至少我现在的项目是这样做的。