【发布时间】:2011-11-23 01:03:01
【问题描述】:
我查看了很多关于此的其他报告,但我的行为似乎有点不同。我正在为我的子操作返回 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 调用 _EditUserInfo 的 HttpPost 版本...你知道这是怎么回事。为什么表单提交后调用的是 post 版本,而不是像初次访问 EditProfile 时调用的 get 版本?
感谢您的帮助!
【问题讨论】:
标签: asp.net-mvc forms asp.net-mvc-3 partial-views stack-overflow