다른 여러 보고서를 살펴 보았지만 광산이 약간 다르게 작동하는 것 같습니다. 내 자식 작업에 대한 PartialViewResults를 반환하므로 재귀의 소스가 아닙니다. 내가 가지고있는 것의 멍청한 버전이있다.MVC 3 StackOverflowException w/@ Html.Action()
// The Controller
[ChildActionOnly]
public ActionResult _EditBillingInfo()
{
// Generate model
return PartialView(model);
}
[HttpPost]
public ActionResult _EditBillingInfo(EditBillingInfoViewModel model)
{
// Update billing informatoin
var profileModel = new EditProfileViewModel()
{
PartialToLoad = "_EditBillingInfo"
};
return View("EditProfile", profileModel);
}
[ChildActionOnly]
public ActionResult _EditUserInfo()
{
// Generate model
return PartialView(model);
}
[HttpPost]
public ActionResult _EditUserInfo(EditUserInfoViewModel model)
{
// Update user informatoin
var profileModel = new EditProfileViewModel()
{
PartialToLoad = "_EditUserInfo"
};
return View("EditProfile", profileModel);
}
public ActionResult EditProfile(EditProfileViewModel model)
{
if (String.IsNullOrEmpty(model.PartialToLoad))
{
model.PartialToLoad = "_EditUserInfo";
}
return View(model);
}
// EditProfile View
@model UPLEX.Web.ViewModels.EditProfileViewModel
@{
ViewBag.Title = "Edit Profile";
Layout = "~/Views/Shared/_LoggedInLayout.cshtml";
}
<div>
<h2>Edit Profile</h2>
<ul>
<li class="up one"><span>@Ajax.ActionLink("Account Information", "_EditUserInfo",
new AjaxOptions { UpdateTargetId = "EditProfileDiv", LoadingElementId = "LoadingImage" })</span></li>
<li class="up two"><span>@Ajax.ActionLink("Billing Information", "_EditBillingInfo",
new AjaxOptions { UpdateTargetId = "EditProfileDiv", LoadingElementId = "LoadingImage" })</span></li>
</ul>
<img alt="Loading Image" id="LoadingImage" style="display: none;" src="../../Content/Images/Misc/ajax-loader.gif" />
<div id="EditProfileDiv">
@Html.Action(Model.PartialToLoad)
</div>
</div>
부분보기는 사용자 정보 또는 결제 정보를 업데이트하는 두 가지 형식입니다.
나는 이것을 통해 디버깅을 시도했지만 무슨 일이 일어나고 있는지 알 수는 없습니다. 사용자가 EditProfile을 탐색 할 때 _EditUserInfo 부분으로로드되고 양식이 편집을 위해 있습니다. 일부 정보를 변경하고 양식을 제출하면 중단되고 @Html.Action()
에 대한 호출의 EditProfile보기에서 StackOverflowException이 발생합니다. 어떤 일이 벌어 지는지는 EditProfile을 처음 방문 할 때 발생하며 @Html.Action
은 _EditUserInfo의 HttpGet 버전을 호출합니다. 사용자 정보를 약간 변경하고 제출을 클릭하십시오. 정보가 업데이트되면 EditProfile보기가 다시 반환되지만 이번에 @Html.Action
은 _EditUserInfo의 HttpPost 버전을 호출하여 사용자 정보를 다시 업데이트하고 EditProfile보기를 다시 반환하고 @Html.Action
은 _EditUserInfo의 HttpPost 버전을 호출합니다. 가고있다. 양식 제출 후 EditProfile에 처음 방문했을 때와 같이 get 버전이 아닌 게시 버전을 호출하는 이유는 무엇입니까?
도움 주셔서 감사합니다.