我有以下代码,当我点击提交按钮时,其名称和值未发送到服务器
@using(Ajax.BeginForm(new AjaxOptions{Url = "http://localhost/controller/action"}))
{
<button name="action" type="submit" value="Save">
<span>Save</span>
<!-- More HTML tags here -->
</button>
}
我查看了jquery.unobtrusive-ajax.js
文件,看它是否应该发送被点击的按钮的名称/值,并找到这些代码将这些值作为属性附加到表单中,后来传递给该表单在邮政要求中。
$("form[data-ajax=true] :submit").live("click", function (evt) {
var name = evt.target.name,
form = $(evt.target).parents("form")[0];
$(form).data(data_click, name ? [{ name: name, value: evt.target.value }] : []);
setTimeout(function () {
$(form).removeData(data_click);
}, 0);
});
evt.target.name
和evt.target.value
的值包含注册点击的按钮标记中HTML元素的名称/值。
我设法通过在上面的代码中将evt.target
替换为evt.currentTarget
来使其工作,但我有点担心这可能会产生意想不到的副作用。
有没有更好的方法将提交按钮的名称/值发送到服务器?
答案 0 :(得分:1)
我已经重现了您描述的问题,您提出的代码修复似乎对我有用。
我可以理解您不愿意修改标准jquery.unobtrusive-ajax.js
库,因为您必须记住在发布新版本时合并您的更改。更好的选择是提交补丁,以便可以审查您的修复程序,并希望将其合并到标准库中。我不知道解决这个问题的最佳方法,但我相信很大一部分ASP.NET代码现在都是开源的including MVC,并且微软已经开始接受来自社区的代码贡献。我建议您查看http://aspnetwebstack.codeplex.com/以获取更多信息。
作为更改库的替代方法,您是否考虑过无需在按钮中包含子元素?如果您的按钮仅包含文本(并且没有标签),则标准库可正常工作并发布按钮的名称和值。如果您需要图像,您可以使用CSS background-image属性而不是嵌套的img标记。