【发布时间】:2013-11-27 18:15:10
【问题描述】:
我正在http://webspirited.com/tagit/ 使用 jquery tagit 插件。它非常适合我的需要,但我无法让它更新 asp:BulletList,因为它是一个服务器控件。
我知道使用 ajax/updatepanel 有一些变通方法,但我需要在回发期间以与其他控件相同的方式工作。
asp.net 是否有任何控件允许标记?
【问题讨论】:
我正在http://webspirited.com/tagit/ 使用 jquery tagit 插件。它非常适合我的需要,但我无法让它更新 asp:BulletList,因为它是一个服务器控件。
我知道使用 ajax/updatepanel 有一些变通方法,但我需要在回发期间以与其他控件相同的方式工作。
asp.net 是否有任何控件允许标记?
【问题讨论】:
我在构建网站时也使用了 jQuery tagit……我遇到了与您描述的相同的问题。我设法克服了所有问题并让它工作,但它绝对不是对开发人员友好的。最后,我们用 ASP.NET Web API 替换了更新面板,用于部分页面渲染(顺便说一句,你应该这样做),并创建了我们自己的标记插件。 jQuery Tagit 插件肯定有一些错误,所以创建我们自己的插件最终是最好的解决方案。这是您在使用 jQuery Tagit 和更新面板时会遇到的问题...
Javascript 在更新面板刷新时丢失引用
首先,当更新面板刷新时,您会丢失所有 javascript 引用。您可以通过在页面请求结束时重新定义它们来刷新这些引用。您可以使用页面请求管理器来完成此操作。这是一个例子:
向您的 javascript 添加一个函数,重新定义位于更新面板中的所有 javascript 引用:
<script type="text/javascript">
function contentPageEvents(){
var myTagitDiv = $('.myTagitDiv')
}
</script>
然后您可以在页面末尾添加以下内容:
<script type="text/javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(contentPageEvents);
</script>
ASP.NET 更改其服务器端控件的 ID
为了引用 ASP.NET 控件,您必须使用 ClientIdMode="Static",或者引用控件的 CSS 类而不是 ID。只要您有效地使用 CssClass 属性,ASP.NET 控件就具有与普通 HTML 控件几乎相同的可定制性级别。
最后,您真的根本不应该使用更新面板。 ASP.NET 更新面板旨在模拟部分页面呈现,但实际上并不执行它。如果您打算构建一个像样的网站并希望使用部分页面呈现,您应该开始考虑使用 MVC 4 附带的新 Web API 控制器类。这个神奇的工具可以在 Web 窗体项目中轻松实现。它内置在 Visual Studio 2012 中,可以下载以在 Visual Studio 2010 中使用。下面是一个教程链接,介绍如何创建可以将项目发布到数据库的 Web api:
asp.net mvc - Posting JSON data via jQuery to ASP.NET MVC 4 controller action (Stack Overflow)
【讨论】: