我使用 jquery ajax 来调用(获取)一个操作,该操作呈现用于创建(输入)新产品的局部视图。此部分视图的内容被插入到具有基本 _layout 的完整页面中的 vid 标记中。下面的ajax代码:
$("#Create").on('click', function (e) {
//debugger;
e.preventDefault();
$.ajax({
type: "GET",
data: { returnUrl: String(window.location) }, <-- passing in the Url
url: "/CreateGroup/CreateGroup",
dataType: 'html',
success: function (data) {
$("#group-list").html(data);
},
});
})
.....
<div id="group-list">
@Html.Partial("PagedGroupList")
</div>
那个行动:
// GET: /Create/
[Authorize]
public PartialViewResult CreateGroup(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
CreateGroupModel cgm = new CreateGroupModel();
cgm.ReturnUrl = returnUrl;
cgm.group = new Static_Group();
return PartialView("CreateGroup", cgm);
}
现在,如果我在单击 CREATE 按钮之前先登录,一切都按预期进行。问题是在没有先登录的情况下单击 CREATE 按钮。由于[Authorize],登录页面将首先出现,登录后,预计会一起重定向回我在整个页面内的CREATE部分视图。问题是登录页面重定向回 NAKED 创建部分视图,而没有任何父视图的元素。如果 CREATE 页面不是部分视图,则登录页面将完美地重定向回整个页面。
我使用 MVC4 默认登录。我试图将登录页面变成ajax表单提交并使用OnSuccess在登录页面和创建partialview中调用document.location,但我发现这是partialview的returnUrl问题。我也尝试过 Request.UrlReferrer.AbsoluteUri,但它给出了相同的 URL,即“/CreateGroup/CreateGroup?returnUrl=http%3A%2F%2Fwww.dev.com%3A22531%2F”或完整的:http://www .dev.com:22531/CreateGroup/CreateGroup?returnUrl=http://www.dev.com:22531/。如果将 Url 放入浏览器,它也会显示纯局部视图。
我相信我一定错过了一些明显的事情,因为这应该是一种常见的情况,但我无法从谷歌搜索中找到任何线索。是否有一个 URL 在其父视图中一起显示部分视图?如果没有,那么可以从部分视图重定向回以前的视图吗?
看起来没有带有其主机页面的部分视图的 URL。目前我能想到的解决方案是将登录重定向到主机页面,并在 Model 或 viewbag 或 session temp 中传入部分视图名称,以在其中使用正确的部分视图再次呈现整个页面。