2012-04-01 1 views
1

"고급 검색"보기가 있습니다. 필터 구성은 아약스 부분보기이며 검색 결과 목록은 또 다른 부분입니다. 필터 구성 부분보기에서 "검색"버튼과 "검색 필터 저장"버튼이 있습니다. 필터가 DB에 저장 되었다면 "저장 성공"이라는 경고를 표시하고 싶습니다. 그렇지 않으면 오류가 전용 영역에 표시되기 때문에 경고가 표시되지 않습니다.MVC3 with Ajax partial view - 생성이 성공했을 때 "Success"경고를 표시하는 방법?

AdvancedSearch.cshtml

@model MyApp.ViewModels.MyViewModel 
@{ 
    ViewBag.Title = "Advanced search"; 
} 

<div id="divUpdateable"> 
    @Html.Partial("_Filters", Model) 
</div> 
<div id="divList"> 
    @Html.Partial("_SearchResults", Model.ResultsList) 
</div> 

_Filters.cshtml

@model MyApp.ViewModels.MyViewModel 
<script type="text/javascript"> 
function ExecuteSearch() { 
    getForm(window.location.pathname + '/ListResults? 
    '&City=' + $("#txtCity").val() + 
    '&pCountry_ID=' + $("#ddlCountry").val() + 
    '&pPriceMin=' + $("#txtPriceMin").val() + 
    '&pPriceMax=' + $("#txtPriceMax").val() + 
     , 'divList'); 
} 
</script> 

@using (Ajax.BeginForm("AddOrUpdateFilter", null, new AjaxOptions 
{ 
    UpdateTargetId = "divUpdateable", 
    InsertionMode = InsertionMode.Replace, 
    OnSuccess = "ExecuteSearch", 
}, new { id = "idformCreate" })) 
{ 
    @Html.ValidationSummary(false, "Some errors occured, please correct and retry.") 
    <p>@Html.ValidationMessage("_FORM")</p> 
    <div class="validation-summary-errors"> 
     <span></span> 
     <ul> 
     </ul> 
    </div> 

    ... controls... 

    <input id="SearchButton" type="button" value="Search" onclick="ExecuteSearch();" /> 
    &nbsp;&nbsp;&nbsp; 
    <input id="SaveButton" type="submit" value="Save your search filter" /> 
} 

내가 대신 "onsuccess는"을 호출하는 기능을 가지고 싶습니다을 :

내가 지금까지 무엇을 가지고 "ExecuteSearch"함수의 내용은 다음과 같습니다.

function OnSuccessDoThis() { 
    alert("Your filter was successfully saved"); 
    ExecuteSearch(); 
}; 

그러나이 양식에서는 "유효성 검사"영역에 오류가 표시 되더라도 경고가 표시됩니다. 경고를 표시하기위한 조건을 표현하는 방법은 무엇입니까?

답변

0

http 응답 코드가 200 또는 304 범위에있는 경우 성공한 것으로 간주됩니다. onSuccess 콜백이 호출됩니다. 컨트롤러가 코드 200을 가진 유효한 페이지를 반환하기 때문에 상황에 따라 문제가 발생합니다. 오류가있는 div가있는 경우 (예 : 셀 수있는 경우) jQuery (onSuccess 콜백 내)가 있어야합니다. 그것은 성공을 의미하지 않습니다.

나는 exacly 그들이 가지고있는 클래스 기억하지 않지만, 그 결과는 다음과 같습니다

if($("div.ErrorMessage").length > 0) { //or span.field-validation-error 
    // success 
} else { 
    // failure 
} 
+0

이 답변 주셔서 감사합니다! 하지만 나는 당신이 제안한 것을 적용 할 수 있을지 모르겠다. 왜냐하면 내가 말하고있는 오류는 사실 비즈니스 규칙의 실패이다. 즉, 사용자가 로그인하지 않았거나 사용자가 특정 종류를 저장할 수있는 권한이 없다는 것이다. 필터 또는 일부 필터 조합은 허용되지 않습니다 ... – Furnica

+0

jQuery는 HTTP를 말합니다. 비즈니스 규칙과 물건에 대해서는 아무것도 모릅니다. 따라서 서버가 적절한 상태 코드를 반환 한 다음 OnSuccess 및 OnFailure 콜백을 사용하십시오. 또는 0lukasz0 제안, 귀하의 응용 프로그램을 좀 더 RESTful 수없는 경우 일부 오류가 포함 된 부분을 서버가 반환 된 경우 검색하려면 jQuery 일부 HTML 긁기를 할 수 있습니다. –