Ajax.beginform执行完全回发而不是部分回发

时间:2014-02-20 09:34:23

标签: c# ajax asp.net-mvc

在视图中我有如下形式的ajax形式:

@using (Ajax.BeginForm("ShowPartial", new AjaxOptions()
{
    InsertionMode=InsertionMode.Replace,
    UpdateTargetId="dane"
}))
{
  // My menu here
}
@Html.Partial("ShowPartial")

ShowPartial与此控制器方法连接:

    public ActionResult ShowPartial(string DeviceName, string submit, int? Page)
    {
        List<Expression<Func<DeviceInstance, bool>>> where = new List<Expression<Func<DeviceInstance, bool>>>();
        int PageNo = 1;
        if (Page.HasValue)
        {
            PageNo = Page.Value;
        }
        if (DeviceName != "" && DeviceName != null)
        {
            where.Add(w => w.Device.Name.Contains(DeviceName));
        }
        return PartialView(unitOfWork.deviceInstanceRepository.Get(where, q => q.OrderBy(o => o.Id), PageNo, w => w.Device, w => w.DeviceUsage));
    }

和PartialView:

@model IEnumerable<magazyn.Models.DeviceInstance>
<table class="table table-striped" id="dane">
    <tr>
        //table headers
    </tr>

    @foreach (var item in Model)
    {
        // rendering table contet
    }

</table>

任何人都可以告诉我为什么上面的代码是完全回发而不是部分回复。

2 个答案:

答案 0 :(得分:11)

我不知道微软的ajax助手依赖于Jquery + Microsoft jquery插件。 在意识到我找到了需要的插件并将其下载到包管理器之后。

PM> Install-Package Microsoft.jQuery.Unobtrusive.Ajax

答案 1 :(得分:6)

检查此工作解决方案 -

让您的主控制器操作如下所示 -

    public ActionResult Ajax()
    {
        return View();
    }

它将返回以下View。我已经安装了Unobstructive Ajax nuget并引用了它的js脚本,如下所示。

@{
    ViewBag.Title = "Ajax";
}

<h2>Ajax</h2>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>

@using (Ajax.BeginForm("ShowPartial", new AjaxOptions()
{
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "dane"
}))
{
    <input type="submit" value="click"/>
}

<div id="dane">
    @Html.Action("ShowPartial")
</div>

然后我还有一个控制器动作,当这个ajax请求发出时会被击中。此控制器操作将返回您的部分视图 -

    public ActionResult ShowPartial()
    {
        return PartialView("MyPartial");
    }

部分视图如下 -

<div>
    @DateTime.Now
</div>

当您运行该应用程序并单击该按钮时,将在div中更改日期时间而不进行回发 -

enter image description here