Ajax表单重新加载/返回新页面而不是更新

时间:2013-05-14 15:34:35

标签: asp.net asp.net-mvc asp.net-ajax

我正在尝试我的手和Asp.net MVC 4并且遇到一个Ajax表单的问题,返回一个全新的页面,而不仅仅是更新div。

这是剃刀html代码:

<div class="All">
    <div class="Search">
        @using (Ajax.BeginForm( new AjaxOptions { UpdateTargetId = "CurrentSku" } ))
        {
        @Html.Label("Enter Sku:")
        @Html.TextBox("textBox1")
        <input type="submit" value="Find" />
        }
    </div>
    <div id="CurrentSku">
        <span>No Sku selected.</span>
    </div>

以及控制器:

    public ActionResult Index()
    {
        // Pay no attention to this, just a place holder
        return View( db.xInventoryExt.Take(1) );
    }

    [HttpPost]
    public ActionResult Index(string textBox1)
    {
        if (db.xInventoryExt.Count(a => a.InvtID == textBox1) < 1)
        {
            return Content("Sku not found.", "text/html");
        }

        var ret = db.xInventoryExt.First(b => b.InvtID == textBox1);

        return Content(ret.ToString(), "text/html");
    }

我读到这有时会在不包括MicrosoftAjax.debug.js时发生,但我无法在任何地方找到该文件的副本。

1 个答案:

答案 0 :(得分:2)

  

我读到这有时会在不包括MicrosoftAjax.debug.js

时发生

实际上你需要包含jquery.unobtrusive-ajax.js脚本。 MicrosoftAjax.debug.js是旧版ASP.NET MVC的一部分,现在已经完全过时了。所以基本上如果你使用ASP.NET MVC 4并使用默认的包(~/App_Start/BundleConfig.cs),在你的_Layout.cshtml中你可以在DOM的末尾简单地使用以下内容:

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
@RenderSection("scripts", required: false)

现在您的Ajax。*帮助程序将起作用,您也可以启用不显眼的jQuery验证。这是因为定义了~/bundles/jqueryval包的方式:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
            "~/Scripts/jquery.unobtrusive*",
            "~/Scripts/jquery.validate*"));

如果您不使用捆绑包,则只需按顺序包含相应的脚本:

<script type="text/javascript" src="~/scripts/jquery-1.8.2.js"></script>
<script type="text/javascript" src="~/scripts/jquery.unobtrusive-ajax.js"></script>
@RenderSection("scripts", required: false)