ASP.NET 服务器端标签与基于 JavaScript 的 UI 和 REST
Posted
技术标签:
【中文标题】ASP.NET 服务器端标签与基于 JavaScript 的 UI 和 REST【英文标题】:ASP.NET server side tags vs. JavaScript-based UI and REST 【发布时间】:2010-10-12 14:30:20 【问题描述】:我一直在开发带有服务器端 ASP.NET 控件和代码隐藏文件等的“传统”ASP.NET 应用程序。现在我正在探索几个 javascript 库,例如:jQuery、YUI、Ext Js、Prototype。 (也很难选择一个,但这是另一篇文章)。所有这些库都使客户端到服务器的通信变得更加容易,但它们还提供了一组非常漂亮的 UI 控件。在我看来,有些控件比 ASP.NET 服务器端控件更时尚。
但现在我质疑传统的 ASP.NET 模型。我倾向于通过 REST 与服务器(只是一个简单的 aspx 页面)对话的所有 html/JS UI。 你怎么看?有人用过这种方法吗?有哪些缺点和陷阱?此外,如果您可以评论您使用的 JS 库/框架以及您使用它的经验,那也很棒。
谢谢
【问题讨论】:
【参考方案1】:这是一个很长的话题,很多人都在讨论,但本质上的区别基本上是这样的:
适用于非常繁重的 Web 应用程序,它们维护着大量的状态信息;经常停留在同一页面上并且行为类似于桌面应用程序,传统的 ASP.NET WebForms 模型为您提供了很多将所有这些结合在一起的粘合剂。
对于其他一切,REST/MVC 模型效果最佳。
这是一个概括,并不适用于每一种情况,但总的来说,这是一个很好的经验法则。
还需要指出的是,如果您没有固定的受众(例如企业内部网,有时甚至是这样),您应该对您的网站、WebForms或 REST 进行编码,以没有JS的工作。然后回去为那些支持它的人添加甜蜜的善良。
【讨论】:
我坚信,如果非 JS 方法需要更长的时间,请从一开始就使用 JS(尤其是对于经过身份验证的用户)。没有 JS 的人已经习惯了互联网被破坏。 @Iconic 这是我们在网站搜索引擎排名不佳时首先解决的问题... 我应该说“仅适用于经过身份验证的用户”。 @iconic 如果您“为两者编写代码”,非 JS 方法只会花费更长的时间。超语义化、功能化的 XHTML 非常适合 JS 操作:)【参考方案2】:不排除混合模型。 ASP.NET 现在支持将 javascript 本地输出到浏览器的服务器控件。如果您有呈现标记并使用 ASP.NET WebForms 模型发布数据的传统控件,请考虑将控件修改为 ScriptControls,它允许您在现有代码隐藏中处理加载数据等,但编写 javascript 来处理 UI完全控制。您可以编写输出所需 javascript 的服务器控件(并在加载期间使用来自代码隐藏的数据设置变量值等),然后让您的 javascript 使用 AJAX 与 Web 服务通信,而不是进行回发。一定要探索 ajax.asp.net。
【讨论】:
【参考方案3】:如果浏览器不支持 JS,你将完全屏蔽用户。此外,您可能会遇到一些搜索引擎的问题。请注意,我这样说是因为您正在考虑在浏览器上点击一个 URL,然后只使用 JS 来处理其余部分。就此而言,将所有内容都放在 flash 和 Silverlight 中也是如此。其中任何一个都适用于私人信息或不打算进入搜索引擎的功能,但对于其余信息,您确实需要不同的 URL。
也就是说:ASP.NET 在防止 no-js 问题方面并不是那么好。甚至网格的默认分页也是该问题-我从谷歌的少数条目中获得了一个站点到 2800+。 http://asp.net/mvc 更能说明您正在使用的内容。
【讨论】:
使用不支持 js 的浏览器的用户在使用常规的 asp.net 页面(相当广泛地使用 js)和互联网的其他部分时会遇到问题。我也不明白为什么你不能让基于 js 的 ui 搜索引擎友好 @WebMatrix 让基于 JS 的 UI 对搜索引擎友好的唯一方法是在没有 JS 的情况下正常运行。而且你忽略了屏幕阅读器和其他不支持 JS 的残疾人辅助软件。不用 JS 也很容易让 ASP.NET 工作,只需要不偷懒。 同意 rex,asp.net 隐藏了它并在许多地方使用了一些糟糕的默认值 :( ...但是每个 asp.net 开发人员都需要注意这些。既然你提到了屏幕阅读器和相关软件,我认为在某些应用程序/组织/地方,不遵守这些甚至是非法的。以上是关于ASP.NET 服务器端标签与基于 JavaScript 的 UI 和 REST的主要内容,如果未能解决你的问题,请参考以下文章
我在asp.net下使用object标签,object的id名称得不到,说不存在,怎么办?
如何让 jQuery 验证生成与服务器端 ASP .NET MVC 验证相同的标记?