Asp.net mvc MVC 3 StackOverflowException w/@Html.Action()

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

我已经看过了很多关于这方面的报道,但我的报道似乎有点不同。我为我的子操作返回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>
//控制器
[仅限儿童]
公共行动结果\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
,这不会创建一个与您所经历的一样的循环吗