0

다른 여러 보고서를 살펴 보았지만 광산이 약간 다르게 작동하는 것 같습니다. 내 자식 작업에 대한 PartialViewResults를 반환하므로 재귀의 소스가 아닙니다. 내가 가지고있는 것의 멍청한 버전이있다.MVC 3 StackOverflowException w/@ Html.Action()

// 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 버전을 호출합니다. 가고있다. 양식 제출 후 EditProfile에 처음 방문했을 때와 같이 get 버전이 아닌 게시 ​​버전을 호출하는 이유는 무엇입니까?

도움 주셔서 감사합니다.

답변

0

나는이 잘못된 조금 받고있을 수도 것은 그렇게 긴 하루 지났지 만 "_EditUserInfo"에 (이 비어있는 경우) EditProfile 당신이 다음 PartialToLoad을 설정 _EditUserInfo 당신이 _EditUserInfo로 다시 설정이는 만들어지지 않습니다 당신이 겪고있는 것처럼 행동하는 루프?