假设我正在使用webforms ASP.NET和jQuery构建StackOverflow克隆。问题页面下面有一个问题,几个答案和评论。要求:
我想弄清楚的是如何在不必维护两组标记的情况下执行此操作(一组使用某种形式的jQuery模板绑定在客户端上,另一组使用传统的WebForms绑定在服务器上)。
我有什么选择?
答案 0 :(得分:1)
它不使用jQuery,但Spark视图引擎提供了一个JavascriptViewResult
类,允许您在客户端和服务器上呈现模板。这适用于您描述的确切情况。请参阅K. Scott Allen的this post,了解其工作原理的简单说明。
然后,您可以在服务器和客户端上使用相同的View页面。在服务器上,您将viewmodel对象传递给视图,并在客户端上传递JSON对象。您甚至可以在视图中包含代码,只要它是C#和JavaScript语言的有效代码即可。
例如,var x = 1;
将在C#和Javascript中编译。
答案 1 :(得分:1)
虽然它并不完全是您所要求的,但您可能需要考虑通过服务(不使用更新面板)在服务器上呈现HTML并将其发送到客户端而不是使用客户端模板。这可不是那么糟糕,因为Facebook正在这样做: http://www.facebook.com/video/video.php?v=596368660334 如果它适合你的情况取决于你的标记有多丰富,通过网络发送的数据的百分比将是标记而不是内容。
答案 2 :(得分:1)
我不知道这是否可能是一个选项,但使用ASP.net MVC这变得相对微不足道。例如,您有一个部分的答案视图,这是页面上标记的一部分。然后,您还可以在控制器上执行操作,例如一个答案id,只返回该局部视图中呈现的html,然后可以将其插入到文档中。
我在一些地方使用过它,发现它是一种非常干净的方法。
答案 3 :(得分:0)
答案 4 :(得分:0)
您可以使用String.format
JavaScript方法,该方法在ScriptManager加载的脚本中定义(或寻找替代实现here)。它类似于String.Format
.Net方法。
string CommentTpl = "<div class='comment {0}'>{1}</div>";
使用String.format
,您可以在客户端和服务器上呈现此模板。只是不要忘记为JavaScript正确地逃避它。
答案 5 :(得分:0)
为什么不使用模板html文件并从JavaScript和服务器加载它?在JavaScript中,您可以为其使用的所有项目获取一次HTML模板(将其存储在变量或其他内容中)。
然后,您可以在两者中进行字符串替换,并且只使用一个地方进行HTML更新。
答案 6 :(得分:0)
抛弃ASP.NET中的所有控件,并仅使用带有Javascript和CSS的HTML标记。
ASP.NET abstracts the presentation layer远离开发人员,但好消息是你不必使用网页控件来编写一个使用.NET的漂亮网站。请仔细阅读帖子:“don’t throw the baby (.NET) out with the bath water (ASP.NET)”。
您仍然可以保留.NET,以便在前端和数据库之间传递信息(使用JSON而不是回发),并处理客户端无法处理的其他逻辑,如安全性和登录。
保持简单,同时仍然动态添加标记,以便您的页面自动加载内容,如下所示:
<% foreach (Post post in PostList) { %>
<h2><%= post.Title %></h2>
<p><%= post.Content %></p>
<% } %>
基本上,如果您不想开始与无偿的ASP.NET标记混淆并添加像ViewState这样的英国媒体报道软件,请将中间层保持在最低限度(例如,尽可能使用ashx“Generic Handlers”而不是aspx“Pages”)。