MVC3 с частичным представлением Ajax - как отобразить предупреждение «Успех», когда создание было успешным? - PullRequest
1 голос
/ 02 апреля 2012

У меня есть представление «Расширенный поиск».Конфигурация фильтров представляет собой частичное представление ajax, а список результатов поиска - еще один.В частичном представлении конфигурации фильтров у меня есть кнопка «Поиск» и кнопка «Сохранить фильтр поиска».Я хотел бы отобразить предупреждение «Сохранение прошло успешно», если фильтр был сохранен в БД, в противном случае предупреждение вообще отсутствует, поскольку в выделенной области отображается любая ошибка.

Это то, что у меня такfar:

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»msgstr "функция, что-то вроде этого:

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

Но в этой форме предупреждение отображается, даже если в области" проверки "отображаются ошибки.Как выразить условие для отображения оповещения?

1 Ответ

0 голосов
/ 02 апреля 2012

Если код ответа http находится в диапазоне 200 или 304, он считается успешным. И вызывается обратный вызов onSuccess, в вашем случае это происходит всегда, потому что ваш контроллер возвращает допустимую страницу с кодом 200. Вы должны посмотреть с помощью jQuery (в рамках обратного вызова onSuccess), если есть div с ошибками (например, подсчитать их) и если нет, это значит успех.

Я точно не помню, какой у них класс, но это выглядело бы так:

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