Asp.net mvc MVC 3 StackOverflowException w/@Html.Action()
我已经看过了很多关于这方面的报道,但我的报道似乎有点不同。我为我的子操作返回PartialViewResults,所以这不是递归的来源。这是我所拥有的一个简单的版本Asp.net mvc MVC 3 StackOverflowException w/@Html.Action(),asp.net-mvc,forms,asp.net-mvc-3,partial-views,stack-overflow,Asp.net Mvc,Forms,Asp.net Mvc 3,Partial Views,Stack Overflow,我已经看过了很多关于这方面的报道,但我的报道似乎有点不同。我为我的子操作返回PartialViewResults,所以这不是递归的来源。这是我所拥有的一个简单的版本 // The Controller [ChildActionOnly] public ActionResult _EditBillingInfo() { // Generate model return PartialView(model); } [HttpPost] public ActionResult _E
// 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>
//控制器
[仅限儿童]
公共行动结果\u EditBillingInfo()
{
//生成模型
返回局部视图(模型);
}
[HttpPost]
公共行动结果\u EditBillingInfo(EditBillingInfo视图模型)
{
//更新帐单信息
var profileModel=new EditProfileViewModel()
{
PartialToLoad=“\u EditBillingInfo”
};
返回视图(“EditProfile”,profileModel);
}
[仅限儿童]
公共操作结果_EditUserInfo()
{
//生成模型
返回局部视图(模型);
}
[HttpPost]
公共操作结果\u EditUserInfo(EditUserInfoViewModel模型)
{
//更新用户信息
var profileModel=new EditProfileViewModel()
{
PartialToLoad=“\u EditUserInfo”
};
返回视图(“EditProfile”,profileModel);
}
公共操作结果EditProfile(EditProfileViewModel模型)
{
if(String.IsNullOrEmpty(model.PartialToLoad))
{
model.PartialToLoad=“\u EditUserInfo”;
}
返回视图(模型);
}
//编辑纵断面图
@模型UPLEX.Web.ViewModels.EditProfileViewModel
@{
ViewBag.Title=“编辑配置文件”;
Layout=“~/Views/Shared/_LoggedInLayout.cshtml”;
}
编辑配置文件
- @Ajax.ActionLink(“帐户信息”、“\u EditUserInfo”,
新的AjaxOptions{UpdateTargetId=“EditProfileDiv”,LoadingElementId=“LoadingImage”})
- @Ajax.ActionLink(“账单信息”、“\u EditBillingInfo”,
新的AjaxOptions{UpdateTargetId=“EditProfileDiv”,LoadingElementId=“LoadingImage”})
@Action(Model.PartialToLoad)
部分视图是用于更新用户信息或账单信息的两种形式
我对此进行了调试,发现了发生的情况,但无法找出原因。当用户浏览到EditProfile时,它将加载_EditUserInfo部分,表单将在那里进行编辑。当您更改一些信息并提交它挂起的表单时,在调用@Html.Action()
时,EditProfile视图中会出现StackOverflowException。在最初访问EditProfile时,@Html.Action
调用了HttpGet版本的_EditUserInfo。您可以对用户信息进行一些更改,然后单击“提交”。信息更新后,将再次返回EditProfile视图,但这次@Html.Action
调用HttpPost版本的_EditUserInfo再次更新用户信息,再次返回EditProfile视图,@Html.Action
调用HttpPost版本的_EditUserInfo。。。你知道这是怎么回事。为什么在表单提交后,它会像最初访问EditProfile时那样调用post版本而不是get版本
谢谢你的帮助 我可能弄错了,这是漫长的一天,但是在
EditProfile
中,您将PartialToLoad
(如果它是空的)设置为“\u EditUserInfo”
,然后在\u EditUserInfo
中再次将其设置为\u EditUserInfo
,这不会创建一个与您所经历的一样的循环吗