我已经查看过其他一些关于此的报告,但我的行为似乎有点不同。我正在为子操作返回PartialViewResults,因此这不是递归的来源。这是我所拥有的一个愚蠢的版本。
// 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
调用HttpPost版本_EditUserInfo ...你得到了它的发展方向。为什么在表单提交之后它会调用post版本而不是像初始访问EditProfile那样调用get版本?
感谢您的帮助!
答案 0 :(得分:0)
我可能会对此有点不对,这是漫长的一天,但在EditProfile
中,您将PartialToLoad
(如果它为空)设置为"_EditUserInfo"
,然后在{{1}你再次将它设置为_EditUserInfo
,这不会创建一个与你所经历的一样的循环吗?