【问题标题】:MVC 3 StackOverflowException w/ @Html.Action()MVC 3 StackOverflowException w/@Html.Action()
【发布时间】: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


    【解决方案1】:

    我可能弄错了,这是漫长的一天,但是在EditProfile 中,您将PartialToLoad(如果为空)设置为"_EditUserInfo",然后在_EditUserInfo 中再次将其设置为@ 987654325@,这不会创建一个循环,就像您正在经历的那样吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 2011-05-23
      • 2011-11-27
      • 2013-05-16
      • 2012-01-19
      相关资源
      最近更新 更多