1

我有以下代码,当我单击提交按钮时,它的名称和值没有被发送到服务器

@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.nameevt.target.value包含来自注册点击的按钮标记内的 HTML 元素的名称/值。

evt.target我设法通过替换上面的代码来让它工作,evt.currentTarget但我有点担心这可能会产生意想不到的副作用。

有没有更好的方法将提交按钮的名称/值发送到服务器?

4

1 回答 1

1

我已经重现了您描述的问题,并且您提出的代码修复似乎对我有用。

我可以理解您不愿意修改标准jquery.unobtrusive-ajax.js库,因为您必须记住在发布新版本时合并您的更改。一个更好的选择是提交一个补丁,以便您的修复可以被审查,并有望被纳入标准库。我不知道解决这个问题的最佳方式,但我相信大部分 ASP.NET 代码现在都是开源的,包括 MVC,并且微软已经开始接受来自社区的代码贡献。我建议查看http://aspnetwebstack.codeplex.com/了解更多信息。

作为更改库的替代方法,您是否考虑过消除在按钮中包含子元素的需要?如果您的按钮仅包含文本(并且没有标签),则标准库可以正常工作并发布按钮的名称和值。如果您需要图像,您可以使用 CSS background-image 属性而不是嵌套的 img 标签。

于 2012-07-31T13:05:06.447 回答