我正在尝试我的手和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时发生,但我无法在任何地方找到该文件的副本。
答案 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)