从 ASP.NET 切换到面包和黄油 HTML/jQuery 的优势

Posted

技术标签:

【中文标题】从 ASP.NET 切换到面包和黄油 HTML/jQuery 的优势【英文标题】:Advantage of switching from ASP.NET to bread & butter HTML/jQuery 【发布时间】:2010-10-17 03:18:09 【问题描述】:

我越来越厌烦关于控件 ID 的所有怪癖,试图在服务器端获取您的数据(基于客户端事件)。我似乎花更多的时间与 asp.net 中的控件作斗争,我认为这花费的时间比使用它获得的更多。

我正在考虑将纯 html/javascript 与 jQuery 和一个为数据返回 json 的 Web 服务一起使用。

我认为我会从 webforms 中唯一错过的是 MasterPages、会话管理、基于 Windows 登录的身份验证和可能的验证器(尽管它们也有一些怪癖)。 (其实可能不针对session和auth,但是我从来没有开发过webservices)

方式有问题吗 我正在考虑这个,或者 我没想到的东西? asp.net 中是否有您认为 我想我会想念吗? 有没有人做过这个并想分享经验?

还请注意,我只有 Framework 2.0 可供开发。


编辑:在 asp.net 中给我带来麻烦的事情让我对切换感到好奇:

这是一个给我带来问题的页面示例。

有一个树表(master/details)

您可以编辑每个子行上的字段。

当您按下保存按钮时,必须更新组行中的数据(只是来自选择的数据,数据库中没有修改),如 子行的数据。

我不想刷新整个页面,因为显示的记录是基于搜索条件的。

主/细节是使用中继器生成的

尝试从后面的代码更新记录真的很古怪,而且仍然不知道更新显示。

使用 jQuery 和 Web 服务,我的猜测是我可以直接更新到数据库,请求我想要显示的内容,然后更新该记录。这就是让我怀疑 asp.net 是否会妨碍我的事情。

____________________________________________________________________________ | - 关于集团的一些细节| |________________________________________________________________________| |¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ˉ ¯¯¯¯¯¯| | ChildRecord 一些可编辑的字段 | ChildRecord 一些可编辑的字段 | ChildRecord 一些可编辑的字段 | ChildRecord 一些可编辑的字段 |_______________________________________________________| ____________________________________________________________________________ | + 关于集团的一些细节 | |________________________________________________________________________| ____________________________________________________________________________ | + 关于集团的一些细节 | |________________________________________________________________________|

编辑2: 我对 ASP.NET 的问题与 ajax 无关。是的,我使用 jQuery 使界面更加动态,例如在不需要时显示/隐藏搜索部分并从树中折叠细节,但这就是我所做的全部。

困扰我的是,如果我想在这个例子中检查哪个按钮被点击了,我不得不使用一些感觉有点笨拙的技巧。

如果你想在转发器中使用数据绑定组合框,你必须使用代码隐藏来设置选定的值,检索选定的数据会很痛苦。

接下来,如果要检查修改了哪些数据,则必须将数据表保存在视图状态中,从转发器中的所有控件中读取数据,然后与数据表进行比较以进行更新。这就是asp.net困扰我的这类事情。

【问题讨论】:

【参考方案1】:

如果使用得当,ASP.NET 和 JavaScript/jQuery Web 应用程序真的可以相互补充。我现在已经在 3 个不同的 Web 应用程序中实现了 jQuery,并且喜欢它的每一分钟。只要您充分利用每个组件的优势,您最终会对项目感到满意。

您特别提到了控制 ID 引起了问题,但这真的没什么大不了的。

JavaScript

document.getElementById("<%=this.MyObject.ClientID %>");

jQuery

$("#<%=this.MyObject.ClientID %>")....

在您的父子关系示例中,您可以非常轻松地准确处理您使用 ASP.NET 讨论的内容以及使用 UpdatePanels 讨论的 AJAX 框架。

【讨论】:

唯一有点困难的时候是你想把你所有的 js 代码放在一个外部文件中。一种解决方法是在页面上获取客户端 ID,然后从外部文件中引用它。 在初始代码页上:“var MyObjectClientID = ” 在外部 js 文件上:"document.getElementById(MyObjectClientID)" 或 "$("#" + MyObjectClientID)" 我们都从那里开始,我猜我们中的一些人只是在那里呆得更久。 @Jon Erikson:我只将外部文件用于可重用的东西。在这种情况下,我仍然会调用一个函数,其中包含一个包含参数的初始化对象,所以在我的情况下,这不是问题。【参考方案2】:

您不必放弃一切,例如 MasterPages。您可以尝试关闭 ViewState,关闭 EventValidation 并尽可能少地使用 ASP.NET 控件(基本上 - 如果使用 XHTML 可以轻松实现某些功能,请将其编写为 XHTML)。您仍然可以在需要的地方使用 ASP.NET 控件。

我认为你并不孤单。在使用了两年的 WebForms 之后,我也厌倦了它们,在我发现 jQuery 有多棒以及它与 Web 服务的配合有多好之后,我极大地改变了我的开发模型。我现在正在慢慢转向 MVC,因为我发现它是最终的解决方案,但是对于其他一些应用程序(小型和/或针对 2.0),我只是尝试使用更少的服务器控件,摆脱 ViewState,使用更多的 AJAX(网络服务)。它工作正常。我推荐 Dave Ward 的 Encosia - 从 this article 开始。我承认它让我看到了使用 .NET Framework 开发 Web 应用程序的其他一些方法。祝你好运!

【讨论】:

【参考方案3】:

我认为要问自己的基本问题是:

我是否将控件用于它们的设计目的?

仅在 2.0 框架中使用 ASP.NET,我发现我不必处理您所描述的问题。是的,ASP.NET 可能很古怪,但主要是当您将它用于非预期用途时。在这种情况下,自定义滚动控件很容易填补市场空白。

编辑:

您的麻烦听起来像是您正在尝试实现 AJAX 技术,但是在您的问题中您没有提到使用AJAX framework。看看它,因为它可能能够填补你的利基。

【讨论】:

在我看来,控件应该足够通用,所以我什至不必问自己刚才提到的问题。【参考方案4】:

在 JavaScript/JQuery 中创建表也不是最优雅的代码。所以我会想念Repeater控件。

此外,还有针对 ClientId 问题的解决方法。

我的页面中有很多代码如下所示:

var myTextBoxId = '';

如果有一堆控件,我需要客户端 ID,因为我会将它们放在一个对象中

var myControlIds = MyTextBoxID: '' ;

另一种解决方法是将特定的 css 类放在您的控件或自定义属性名称/值上。

所以你的文本框可能是:

我的最后一个技巧是使用“Ends With”属性查找器。

所以你的 JQuery,而不是

$("#MyTextBox") // 由于客户端 id 损坏而无法工作

改为: $("[id $=MyTextBox]")

这会搜索所有控件的“id”属性以找到一个值以“MyTextBox”结尾的控件

【讨论】:

>>在 JavaScript/JQuery 中创建表也不是最优雅的代码。所以我会想念Repeater控件。您可以使用客户端模板解析器,例如 west-wind.com/weblog/posts/509108.aspx【参考方案5】:

这可能是一种范式转变,但如果您正在寻找更多的“面包和黄油”,并且在没有 asp.net 服务器控件的情况下工作起来很舒服,Monorail 可能对您来说是一个不错的选择。它允许你在寻找你想要的东西,同时重量更轻,也是一个基于 MVC 的架构。如果不是因为您的 .net 2.0 限制,我会推荐 asp.net mvc。由于您受到限制,Monorail 可能只是一个可行的选择。

【讨论】:

这将是一个范式转变,但它肯定会让马丁更接近他的目标。

以上是关于从 ASP.NET 切换到面包和黄油 HTML/jQuery 的优势的主要内容,如果未能解决你的问题,请参考以下文章

HTTP网球万人血书跪求的黄油相机规则,今天它来了!

Apriori算法 源码

如何在 ASP.net 页面中设置面包屑导航

从调试模式切换到发布模式时,C# Asp.Net Webservice 抛出异常

您将如何在 asp.net mvc 中实现面包屑助手?

ASP.NET 从 SQL 切换到 Access DB 后,我无法让我的数据源/gridview 正常工作