我刚刚将jQuery和jQuery UI更新为:jquery-1.9.0.min.js和jquery-ui-1.9.2.min.js
并且...我所有不引人注意的Ajax调用(Ajax.ActionLink,Ajax.BeginForm)都停止正常工作 - 它们在新页面中打开结果,而不是更新现有的div.
当我的页面加载时,我在Firebug中收到此javascript错误:
代码当然没有改变,只是使用Nuget更新了jQuery脚本.
有人经历过同样的问题吗?
//解决方案:我只是简单地替换了四次出现,如建议的批准答案和不显眼的ajax插件已启动并再次使用jquery 1.9.0
更新//观察底部标记答案的注释,这是解决此问题的最佳方法.
//原帖:我升级到jQuery 1.9.0,但随后不引人注意的ajax插件因为他们弃用了live方法而失败了.我试图像这样替换它,因为升级修复了我的另一个错误.但是,它不起作用.我只是简单地用以下方式取代了:
$("a[data-ajax=true]").on("click", function (evt) {
evt.preventDefault();
asyncRequest(this, {
url: this.href,
type: "GET",
data: []
});
});
$("form[data-ajax=true] input[type=image]").on("click", function (evt) {
var name = evt.target.name,
$target = $(evt.target),
form = $target.parents("form")[0],
offset = $target.offset();
$(form).data(data_click, [
{ name: name + ".x", value: Math.round(evt.pageX - offset.left) },
{ name: name + ".y", value: Math.round(evt.pageY - offset.top) }
]);
setTimeout(function () {
$(form).removeData(data_click);
}, 0);
});
$("form[data-ajax=true] :submit").on("click", function (evt) {
var name …
Run Code Online (Sandbox Code Playgroud) 使用ASP.NET MVC 4
和NuGet
管理包.
升级到jQuery 1.9.1
via后NuGet
,我开始收到JavaScript
关于删除live()
函数的错误jQuery 1.9.x
.
我点击F5从VS.NET运行调试模式,进入登录页面,得到以下信息:
发现这个StackOverflow答案:https://stackoverflow.com/a/14512797 并进行了4次更改~\Scripts\jquery.unobtrusive-ajax.js
.
我的~\Scripts\jquery.unobtrusive-ajax.js
:
$(document).on("click", "a[data-ajax=true]", function (evt) {
...
});
$(document).on("click", "form[data-ajax=true] input[type=image]", function (evt) {
...
});
$(document).on("click", "form[data-ajax=true] :submit", function (evt) {
...
});
$(document).on("submit", "form[data-ajax=true]", function (evt) {
...
});
Run Code Online (Sandbox Code Playgroud)
我也物理删除jquery.unobtrusive-ajax.min.js
并用于WebGrease 1.3.0
从我的更新中重新生成它~\Scripts\jquery.unobtrusive-ajax.js
.
但是,出于某种原因,我对不使用该.live()
功能的更改并不坚持.我尝试停止运行MVC应用程序的IIS Express 8.0网站(localhost:63798).
在尝试再次运行F5以在调试模式下运行之前,还尝试执行Build-> Clean Solution,Build-> Rebuild Solution.
如果有人以前经历过这个并且有任何见解,我将非常感激.先感谢您.
asp.net-mvc jquery asp.net-mvc-4 unobtrusive-ajax visual-studio-2012
我知道有图书馆支持unobtrusive AJAX
所以我问我的父亲(也.net程序员)他为什么不使用它,他的答案对我来说非常惊讶:
"
unobtrusive AJAX
(在你的情况下jquery.unobtrusive-ajax
)不建议使用,所以我不使用它.我更喜欢AJAX
使用手动写 请求JQuery
."
我搜索了互联网,但我找不到那些unobtrusive AJAX
不建议使用的地方.
那么使用jquery.unobtrusive-ajax
和有什么问题MVC AJAX helpers
吗?如果是这样,你能说出问题是什么并且可以解决吗?
示例代码:在Visual Studio的MVC 5项目中,我设置了以下控制器和视图:
调节器
TestController.cs
public class TestController : BaseController
{
public ActionResult Index()
{
return View("Index");
}
public PartialViewResult MyPartialView1()
{
return PartialView("PartialView1");
}
public PartialViewResult MyPartialView2()
{
return PartialView("PartialView2");
}
}
Run Code Online (Sandbox Code Playgroud)
查看
Index.cshtml
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<script src="@Url.Content("~/Scripts/jquery-2.1.1.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")"></script>
</head>
<body>
<h1>Testing Unobtrusive AJAX</h1>
@Ajax.ActionLink("Partial 1", "MyPartialView1", "Test",
new AjaxOptions() { UpdateTargetId = "contentShouldLoadHere", InsertionMode = InsertionMode.Replace })
|
@Ajax.ActionLink("Partial 2", "MyPartialView2", "Test",
new AjaxOptions() { UpdateTargetId = "contentShouldLoadHere", InsertionMode = …
Run Code Online (Sandbox Code Playgroud) 我的控制器创建了这样的链接列表
<ul id="MainMenu">
@foreach (var item in Model.MenuItems)
{
<li>@Ajax.ActionLink(item.Caption,
item.ActionName,
item.ControllerName,
new AjaxOptions
{
UpdateTargetId = "pageBody",
OnBegin = "BeginUpdatePage",
OnComplete = "EndUpdatePage",
OnFailure = "FailUpdatePage"
})
</li>
}
</ul>
Run Code Online (Sandbox Code Playgroud)
我有一些像这样的JavaScript
function BeginUpdatePage() {
$("#MainMenu li").removeClass('selected');
$(this).parent().addClass('selected');
$("#pageBody").fadeTo('slow', 0.5);
}
function EndUpdatePage() {
$("#pageBody").fadeTo('slow', 1);
}
function FailUpdatePage() {
alert('There has been an error loading this page please try again.');
}
Run Code Online (Sandbox Code Playgroud)
在BeginUpdatePage函数第1行和第3行执行正常,但第2行"$(this).parent().addClass('selected');" 并没有明显地做任何事情......(我已经在我的css中宣布了这个课程).
我查看了Jquery文档(Jquery.ajax()),它说"this"是被点击的元素.我还检查了默认情况下在我的项目中的"jquery.unobtrusive-ajax.js".执行我的函数时,此文件也会传递"this".
"result = getFunction(element.getAttribute("data-ajax-begin"), ["xhr"]).apply(this,arguments);"
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么......我见过其他使用过这种技术的例子但是我整天都失败了!
如何在Begin,complete函数中找到被单击的元素.
我在使用不显眼的ajax从联系我们表单发布数据时遇到了麻烦.
我的部分视图是这样的:
@model site.ViewModel.Home.ContactUsViewModel
@using (Ajax.BeginForm("_ContactUsPartial", "Home",
new AjaxOptions { UpdateTargetId = "result" }))
{
<fieldset>
<legend>Contact Us</legend>
@Html.ValidationSummary(true)
<div id="result"></div>
<div class="editor-label">
@Html.LabelFor(m => m.FullName)
@Html.ValidationMessageFor(m => m.FullName)</div>
<div class="editor-field">@Html.TextBoxFor(m => m.FullName)</div>
<!-- other fields from model -->
<input type="submit" value="Submit"/>
</fieldset>
}
Run Code Online (Sandbox Code Playgroud)
我的部分视图放在另一个页面上,如下所示:
@Html.Partial("_ContactUsPartial", new ContactUsViewModel());
Run Code Online (Sandbox Code Playgroud)
我的家庭控制器是这样的:
[HttpPost]
public ActionResult _ContactUsPartial(ContactUsViewModel viewModel)
{
if (ModelState.IsValid)
{
try
{
//send email
return Content("Thanks for your message!");
}
catch (Exception ex)
{
return Content("Problem sending the email.");
}
}
return …
Run Code Online (Sandbox Code Playgroud) 如果我在.net 4.5中启动一个新项目并点击管理nuget包,请搜索ajax,然后点击install for ajax unobtrusive.然后我可以进入我的cshtml文件并输入@Ajax .___,例如@ Ajax.beginForm
如果我使用Dot Net Core创建一个新项目......我不能,而是它给了我无用的错误:
"当前上下文中不存在'Ajax'这个名字"
我在网上搜索,什么都没发现......
基本上我想在.net中使用Ajax调用创建一个Form
如:
" @using (Ajax.BeginForm("EmployeeMaster", "Home", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "divEmp" })) {
"
谁知道我还能尝试什么?
在上面,我可以看到Ajax是AjaxHelper类型的对象,它来自System.web.mvc.webviewpage ...所以也许它从来没有意味着可用于.net核心
我正在尝试使用Microsoft.JQuery.Unobtrusive.Ajax
。我首先使用NuGet安装软件包,然后按预期可以在依赖项中看到它。
我的问题是我找不到引用脚本的方法,因此无法在视图中使用它。在这里,我看到应该将其添加到布局中:
<script src="~/lib/Microsoft.jQuery.Unobtrusive.Ajax/jquery.unobtrusive-ajax.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
但是该路径导致没有文件:
这是我的控制器动作:
[HttpPost]
public IActionResult OrderItem([Bind("Id,Quantity")] Item item)
{
return Json(new { foo= item.Id, boo= item.Quantity});
}
Run Code Online (Sandbox Code Playgroud)
表格:
<form asp-action="OrderItem" asp-controller="Menu" method="POST" data-ajax="true" data-ajax-update="#divEmp" data-ajax-mode="replace" data-ajax-complete="onComplete" data-ajax-failure="onFailed" data-ajax-success="onSuccess">
<input asp-for="@i.Id" value="@i.Id" type="hidden" name="Id" />
<input asp-for="@i.Quantity" value="@i.Quantity" type="number" name="Quantity" class="form-group" />
<button class="btn btn-primary" type="submit">Add to Order</button>
</form>
Run Code Online (Sandbox Code Playgroud)
我从控制器返回了JSON,但是我被重定向到了显示JSON数据的页面。我的目标是使用JSON对象中的数据来更新同一视图中的组件。
.net c# unobtrusive-ajax visual-studio-2017 asp.net-core-mvc-2.0
如果我不参考,jquery.unobtrusive-ajax.js
我可以在邮政上获得附件.如果我引用它它会给我null.
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
@using (Ajax.BeginForm("Index", "ContactSubmission", new AjaxOptions{ InsertionMode = InsertionMode.Replace, HttpMethod = "POST", OnSuccess = "updateSuccess" },
new { enctype = "multipart/form-data",@class = "form-horizontal", role = "form" }))
{
///code here
Run Code Online (Sandbox Code Playgroud)
}
[HttpPost]
public JsonResult Index(Contact contact)
{
if (ModelState.IsValid)
{
if (contact != null)
{
string attachment = string.Empty;
// HttpPostedFileBase Attachment
if (contact.Attachment != null) attachment = SaveFile(contact.Attachment);
......
Run Code Online (Sandbox Code Playgroud)
怎么办呢?
我想使用Ajax.ActionLink Html助手,因此我需要jquery.unobtrusive-ajax.min.js库,但IE总是显示此错误:
Microsoft JScript运行时错误:无法设置属性'unobtrusive'的值:object为null或undefined
我已经读过解决方案是使用jquery.validate.min.js和jquery.validate.unobtrusive.min.js,但后来我无法识别服务器端的ajax调用.
我正在尝试使用可选的客户端验证
下面的图片显示了我对可选的客户端验证的意思:我的表单上唯一一个字段应该包含电子邮件,因此附加了一个电子邮件验证器.
现在我们点击保存.由于我们的文本"name @ doamin"不是有效的电子邮件,因此会显示验证摘要.与验证摘要一起,我们取消隐藏"无论如何"保存按钮.
第二个按钮是一个正常的提交按钮class="cancel"
.这指示jQuery.validate.js
脚本在使用此按钮提交时跳过验证.
以下是视图的代码段:
@using (Html.BeginForm())
{
<div>
<input data-val="true" data-val-email="Uups!" name="emailfield" />
<span class="field-validation-valid" data-valmsg-for="emailfield" data-valmsg-replace="false">*</span>
</div>
<input type="submit" value="Save" />
@Html.ValidationSummary(false, "Still errors:")
<div class="validation-summary-valid" data-valmsg-summary="true">
<input type="submit" value="Save anyway" class="cancel" />
</div>
}
Run Code Online (Sandbox Code Playgroud)
一切正常.
如果我切换到Ajax表单,第二个提交按钮 - "仍然保存"按预期停止工作.它的行为与正常行为相同,并且在验证成功之前阻止提交.
以下是"ajaxified"视图的代码段:
@using (Ajax.BeginForm("Edit", new { id = "0" },
new AjaxOptions
{
HttpMethod = "POST",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "ajaxSection", …
Run Code Online (Sandbox Code Playgroud) jquery jquery-validate unobtrusive-validation asp.net-mvc-4 unobtrusive-ajax
我有一个锚点,它应该用局部视图替换网格。
<a class="btn btn-primary"
data-ajax="true"
data-ajax-method="GET"
data-ajax-mode="replace"
data-ajax-update="content"
data-ajax-url="@Url.Action("add","user")"> Create User </a>
<div class="row table-area">
<div class="col-md-12" id="content">
@Html.AjaxGrid(Url.Action("results", "user"))
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我看到它使用部分视图调用用户操作,但它从不使用id="content"
.
这是我的控制器方法 -
[Route("add")]
public IActionResult AddUser()
{
return PartialView("Partials/AddUser",new RegisterViewModel());
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,它应该用部分视图完全替换网格内容,但它不会替换 . 响应状态为 200,我可以看到内容正在响应中返回。有人知道这里有什么问题吗?
unobtrusive-ajax ×13
jquery ×6
ajax ×3
asp.net-mvc ×3
asp.net-core ×2
c# ×2
.net ×1
.net-core ×1
ajaxform ×1
asp.net ×1
asp.net-ajax ×1