是否可以将Unobtrusive JavaScript的概念与ASP.Net的事件模型混合使用?
答案 0 :(得分:2)
ASP.NET使其变得非常困难,因为每个服务器端控件都需要通过__doPostback
javascript函数进行回发。
您可以确保不使用任何服务器端控件,但这意味着您将失去ASP.NET的大部分好处。
另一种选择是覆盖OnRender
事件并输出不同的控件/ javascript,但这也是相当多的工作并且违背了ASP.NET的目的。
使用ASP.NET-MVC时,您可以更好地控制。
答案 1 :(得分:0)
是的,到了一定程度。折扣标准控件及其构建方式,没有太多阻止您将所有自己的javascript卸载到单独的文件中。想到的大挂起是引用myControl.ClientID
来在脚本块的中间呈现元素id。通过一些计划,您仍然可以最小化您必须在页面中呈现的脚本数量,以解决此问题。
答案 2 :(得分:0)
我意识到这个问题已经得到解答,但对于任何上网的人来说,我有点不同意接受的答案。
这取决于您使用的控件。
并非所有控件都需要JavaScript。对我来说最大的罪魁祸首就是LinkButton。常规按钮控件根本不使用JavaScript。在我的页面上,我实际上使用常规按钮并使用CSS和JavaScript将它们变成LinkButtons。第一步是使用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当然是可能的。