你能混用ASP.Net和Unobtrusive JavaScript吗?

时间:2010-08-09 19:35:42

标签: javascript asp.net

是否可以将Unobtrusive JavaScript的概念与ASP.Net的事件模型混合使用?

3 个答案:

答案 0 :(得分:2)

ASP.NET使其变得非常困难,因为每个服务器端控件都需要通过__doPostback javascript函数进行回发。

您可以确保不使用任何服务器端控件,但这意味着您将失去ASP.NET的大部分好处。

另一种选择是覆盖OnRender事件并输出不同的控件/ javascript,但这也是相当多的工作并且违背了ASP.NET的目的。

使用ASP.NET-MVC时,您可以更好地控制。

答案 1 :(得分:0)

是的,到了一定程度。折扣标准控件及其构建方式,没有太多阻止您将所有自己的javascript卸载到单独的文件中。想到的大挂起是引用myControl.ClientID来在脚本块的中间呈现元素id。通过一些计划,您仍然可以最小化您必须在页面中呈现的脚本数量,以解决此问题。

答案 2 :(得分:0)

我意识到这个问题已经得到解答,但对于任何上网的人来说,我有点不同意接受的答案。

这取决于您使用的控件。

并非所有控件都需要JavaScript。对我来说最大的罪魁祸首就是LinkBut​​ton。常规按钮控件根本不使用JavaScript。在我的页面上,我实际上使用常规按钮并使用CSS和JavaScript将它们变成LinkBut​​tons。第一步是使用CSS使它们看起来像链接。如果你真的想要花哨,你可以分离按钮,添加一个HTML锚点,并将按钮的所有事件处理程序与锚点关联起来。这意味着没有JavaScript的用户会看到使用CSS设置样式的常规按钮(HTML输入)。任何使用JavaScript的人都会看到HTML链接(

此外,如果您使用JQuery,则可以非常轻松地选择ASP.NET元素,而无需担心ASP.NET添加到ID中的所有额外的mumbo-jumbo。

示例:

<asp:Button id='theButton' text='Click here' cssclass='linkbutton' runat='server' />

您可以使用JQuery选择此单个按钮:

var theButton = $("input[name$='theButton']");

您还可以使用HTML锚点替换“linkbutton”类的所有内容:

$(function() {
    var buttons = $(".linkbutton");
    buttons.each(function() {
        var button = $(this);
        var id = button.attr('id');
        /*
         * If a link button is not working
         * it is likely because it does not
         * have an ID attribute - check that
         */
        if (id)
        {
            var text = button.attr('value');
            var cssclass = button.attr('class');
            button
                .before("<a id='"+id+"' class='"+cssclass+"' href=''>"+text+"</a>")
                .hide()
                .detach();
            $("a[id='"+id+"']").live('click', function(event) {
                $(this).after(button);
                button.click();
                event.preventDefault();
            });
        }
    });
});

GridViews之类的东西更多,但也可行。我发现,在最初的蜜月之后,我避免了那种控制,无论如何只使用了中继器。中继器也不会强加任何令人讨厌的JavaScript。

无论如何,使用ASP.NET WebForms做一些不引人注目的JavaScript当然是可能的。