2012-11-01 6 views
2

ajax를 통해 부분 뷰를 반환하려고합니다. 내 코드는 아래에서 좋아하며 부분보기가 영역에 없으면 잘 작동합니다.MVC 3 Ajax가 부분 뷰를 반환합니다.

[HttpPost] 
public ActionResult SearchLogsAjax(string searchParams) 
{ 
    // Do some searching 
    return PartialView("LogResults", searchResults); 
} 

처음 페이지를 열면 부분보기가 렌더링됩니다. ActionMethod에 아약스 호출을하는 검색 버튼을 누르면 문제가 발생합니다. 관리자 영역에 있다면 클래식보기를 찾을 수 없습니다. 오류가 발생합니다.

The partial view 'LogResults' was not found or no view engine supports the searched locations. The following locations were searched: 

~/Views/Log/LogResults.aspx 
~/Views/Log/LogResults.ascx 
~/Views/Shared/LogResults.aspx 
~/Views/Shared/LogResults.ascx 
~/Views/Log/LogResults.cshtml 
~/Views/Log/LogResults.vbhtml 
~/Views/Shared/LogResults.cshtml 
~/Views/Shared/LogResults.vbhtml 

현재 관리 영역이 현재 영역이 아닌 이유는 무엇입니까? 내가 원하는 영역 이름을 지정할 수있는 방법이 있습니까? new { area = "Admin" }

반면에 코드에서 부분보기 이름 위로 마우스를 이동하면 ReSharper가 예상 한보기를 표시합니다.

enter image description here

답변

0

당신이

new { area = "Admin" } 

을 제안 당신은 동일한 RouteValuesDictionary 매개 변수 및 구문을 사용하여, 원하는 지역의 이름을 지정할 수 있습니다 그러나 나에게 더 까다로운 부분은 적절한 방법 서명을 받고있다 (내가 쓰고 자하는 시그니처를 의미한다). 왜냐하면 두 가지 이상의 선택이 있고 잘못된 시그너처를 얻고 여전히 구문 상 올바르다는 것이 쉽기 때문이다.

public static MvcHtmlString ActionLink(
    this AjaxHelper ajaxHelper, 
    string linkText, 
    string actionName, 
    RouteValueDictionary routeValues, 
    AjaxOptions ajaxOptions 
) 

그래서 당신은 (당신이 게시하지 않았다)이있는 Ajax.ActionLink을 수정 뭔가 같은 :

@Ajax.ActionLink("Link Text", "YourAction", "YourController", new { area = "YourArea" }, new AjaxOptions() { *the ajaxoptions you've been using* }) 

희망 내 생각이 경우

당신은 서명을 원하는 도움이됩니다.

관련 문제