MVC3 с частичным представлением Ajax - как отобразить предупреждение "Успех", когда создание было успешным?
У меня есть представление "Расширенный поиск". Конфигурация фильтров представляет собой частичное представление ajax, а список результатов поиска - еще один. В частичном представлении конфигурации фильтров у меня есть кнопка "Поиск" и кнопка "Сохранить фильтр поиска". Я хотел бы отобразить предупреждение "Сохранение выполнено успешно", если фильтр был сохранен в БД, в противном случае предупреждение вообще отсутствует, поскольку в выделенной области отображается любая ошибка.
Это то, что я до сих пор:
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();" />
<input id="SaveButton" type="submit" value="Save your search filter" />
}
Я хотел бы иметь функцию для вызова OnSuccess вместо "ExecuteSearch", что-то вроде этого:
function OnSuccessDoThis() {
alert("Your filter was successfully saved");
ExecuteSearch();
};
Но в этой форме предупреждение отображается, даже если в области "проверки" отображаются ошибки. Как выразить условие для отображения оповещения?
1 ответ
Если HTTP-код ответа находится в диапазоне 200 или 304, он считается успешным. И вызывается обратный вызов onSuccess, в вашем случае это происходит всегда, потому что ваш контроллер возвращает допустимую страницу с кодом 200. Вы должны посмотреть с помощью jQuery (в рамках обратного вызова onSuccess), если есть div с ошибками (например, подсчитать их), и если есть нет, это означает успех.
Я не помню точно, какой у них класс, но это будет выглядеть так:
if($("div.ErrorMessage").length > 0) { //or span.field-validation-error
// success
} else {
// failure
}