jquery ajax를 사용하여 새 제품을 생성 (입력)하는 부분 뷰를 렌더링하는 동작을 호출합니다. 이 partialview의 내용은 기본 _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);
}
지금, eveerything이 괜찮습니다. 문제는 로그인없이 CREATE 버튼을 처음 클릭 할 때입니다. [Authorize]로 인해 로그인 페이지가 먼저 나타나고 로그인 후에 전체 페이지 내의 CREATE partialview로 다시 리다이렉트 될 것으로 예상됩니다. 문제는 로그인 페이지가 상위 뷰의 요소없이 NAKED create partialview로 다시 리디렉션된다는 것입니다. CREATE 페이지가 partialview가 아닌 경우 로그인 페이지는 전체 페이지로 완벽하게 재 지정됩니다.
MVC4 defafult login을 사용합니다. 로그인 페이지를 ajax 양식으로 만들고 OnSuccess를 사용하여 로그인 페이지와 create partialview에서 document.location을 호출하려고 시도했지만 partialview의 returnUrl 문제인 것으로 나타났습니다. 또한 Request.UrlReferrer.AbsoluteUri를 시도했지만 "/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을 브라우저에 넣으면 순수한 부분보기도 표시됩니다.
나는 이것이 일반적인 시나리오 여야 만하는 확실한 무언가를 놓쳤음에 틀림 없다고 생각하지만 나는 인터넷 검색으로부터 어떤 스레드도 찾을 수 없었다. 부모보기 내부에 partialview를 함께 표시하는 URL이 있습니까? 그렇다면 부분보기에서 이전보기로 다시 리디렉션 할 수 있습니까?
호스트 페이지에 부분보기 URL이없는 것 같습니다. 내가 지금 생각할 수있는 해결책은 호스트 페이지로의 로그인 리디렉션을 얻고 Model 또는 viewbag 또는 session temp의 partialview 이름을 전달하여 전체 페이지를 오른쪽 partialview로 다시 렌더링합니다.