在MVC Ajax.BeginForm中使用某些条件阻止更新html?

时间:2015-02-27 08:14:19

标签: c# asp.net asp.net-mvc asp.net-mvc-4 ajax.beginform

我的视图中有以下代码,
这是用于在站点中搜索,用户可以多次提交以下表单。

@using (Ajax.BeginRouteForm("Search", new AjaxOptions
{
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "SearchContents",
    LoadingElementId = "SearchAjaxLoader",
    OnSuccess = "SearchLoadContentsOnSuccess",
    OnFailure = "SearchLoadContentsOnFailure",
    OnBegin = "SearchLoadContentsOnBegin",
    OnComplete = "SearchLoadContentsOnComplete",
}))
{
   @Html.AntiForgeryToken()
   <input type="text" name="Search" />
   <input type="submit" value="Submit" />
}

我想拒绝旧的ajax结果并仅显示最新的ajax结果 在非mvc Ajax表单中,我创建了一个数组作为ajax计数器,并将服务器响应与它进行比较以防止更新html。
我想知道如何阻止Ajax.BeginForm在某些条件下更新Html。

1 个答案:

答案 0 :(得分:2)

作为一个示例,我将通过OnSuccess调用来演示,您可以针对您希望处理的每个事件执行此操作。

AjaxOptions删除此内容以防止替换;

InsertionMode = InsertionMode.Replace,
UpdateTargetId = "SearchContents",

在你的SearchLoadContentsOnSuccess JavaScript方法中,如果没有看到方法,我会猜到它会是这样的:

function SearchLoadContentsOnSuccess()
{
    // Do something
}

将其更改为:

function SearchLoadContentsOnSuccess(e)
{
    // Do something
}

现在e参数将包含从您的ajax调用发回的数据。

在您更新的方法中,我只需检查响应并按行动。 例如,如果您的响应包含值和结果属性:

function SearchLoadContentsOnSuccess(e)
{
    // Do something 
    $(e.value == 1)
        {
          $('#SearchContents').html(e.results);
        }
}

您只需更改上述方法中的javascript即可满足您的需求。