2012-04-01 8 views
1

「詳細検索」ビューがあります。フィルタ設定はAjaxの部分表示で、検索結果リストは別のものです。私は "検索"ボタンと "あなたの検索フィルターを保存する"送信ボタンがあります。フィルタが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の範囲にある場合は、成功したと見なされます。あなたのケースでは、コントローラがコード200の有効なページを返しているので、onSuccessコールバックが呼び出されます。エラーのあるdivがある場合は(onSuccessコールバック内で)jQueryを調べる必要がありますそれは成功を意味しません。

私は、彼らが持っているものクラス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スクレイピングを行い、サーバーがエラーを含む部分を返したかどうかを検出できます。 –

関連する問題