Javascript 客户端和服务器的ASP.NET MVC模板
这可能吗?以Facebook评论系统为例,说明我想要实现的目标。现有注释在服务器上呈现,但如果我留下新注释,它将在客户机上使用AJAX创建。理想情况下,我只希望将注释模板存储在一个地方,并且可以在服务器(由Razor呈现)和客户端(使用服务器返回的JSON以Javascript呈现)上访问它 有什么想法吗Javascript 客户端和服务器的ASP.NET MVC模板,javascript,asp.net,asp.net-mvc,templates,razor,Javascript,Asp.net,Asp.net Mvc,Templates,Razor,这可能吗?以Facebook评论系统为例,说明我想要实现的目标。现有注释在服务器上呈现,但如果我留下新注释,它将在客户机上使用AJAX创建。理想情况下,我只希望将注释模板存储在一个地方,并且可以在服务器(由Razor呈现)和客户端(使用服务器返回的JSON以Javascript呈现)上访问它 有什么想法吗 编辑:我想另一个选择是坚持纯服务器端呈现,当用户发布新评论时,将呈现的HTML返回到浏览器,并填充到DOM中。这不是很好,但我想知道这是否也可能。我使用的方法是使用一个带有通配符和/或类名的隐
编辑:我想另一个选择是坚持纯服务器端呈现,当用户发布新评论时,将呈现的HTML返回到浏览器,并填充到DOM中。这不是很好,但我想知道这是否也可能。我使用的方法是使用一个带有通配符和/或类名的隐藏HTML模板,然后在文档上通过AJAX/JSON调用加载内容,最后使用javascript中的相同模板刷新或添加新项目
<ul id="template">
<li>
<span class="message"></span>
<span class="date"></span>
</li>
</ul>
<ul id="comments"></ul>
<script type="text/javascript">
$().ready(function() {
loadComments();
});
function loadComments() {
$.post('@Url.Action("GetComments", "Forum")', {}, function(comments) {
for (i = 0; i < comments.length; i++){
loadComment(comments[i]);
}
}, 'json');
}
function loadComment(comment) {
var template = $('#template li').clone();
template.find('.message').text(comment.message);
template.find('.date').text(comment.date);
$('#comments').append(template);
}
</script>
-
$().ready(函数()){
loadComments();
});
函数loadComments(){
$.post('@Url.Action(“GetComments”,“Forum”),{},函数(comments){
对于(i=0;i
对于新邮件,您可以将邮件发布到服务器,然后使用loadComment功能将其添加到列表中,或者刷新整个评论列表。这不是一个完整的示例,但希望您能理解。我反对渲染服务器端,然后将其发送回您的JS脚本以获得带宽和性能。相反,您应该使用在服务器和客户机上都能工作的模板引擎。当客户端希望刷新注释时,它只请求注释的数据,然后使用服务器上使用的相同模板从数据中呈现的新html替换旧的注释html 我一直在使用Mustache模板引擎通过PHP和JS实现这一点。我猜有一个.NET版本适用于ASP.NET,我猜您正在使用ASP.NET 因此,我要做的是确保在PHP和JS中以相同的方式格式化数据,然后使用Mustache模板进行渲染 小胡子使用起来很简单。您只需要一个对象和一个模板,就可以得到HTML 示例对象:
object->user = "Kilroy"
object->comment = "was here"
object->edited = true
模板示例:
{{user}} {{comment}} {{#edited}}(This comment has been edited){{//edited}}
结果:
Kilroy was here (This commment has been edited)
我很少使用razor或ASP.NET MVC,但我通常使用Monorail和NVelocity来实现这一点: 为页面创建一个模板。 对于注释,请在主模板中包含部分模板。 对于AJAX请求,使用该部分模板呈现注释部分的标记。用您首选的方法替换it客户端
这样,无论是常规请求还是ajax请求,都可以将标记放在一个位置。我也在考虑这种方法,但主要缺点是(I)现有内容无法供搜索引擎爬行,以及(ii)页面现在不能正常降级,正如CSS没有告诉浏览器显示:无模板将对用户可见。你认为呢?是的,它有缺点,但是,(i)我为搜索引擎爬行器创建了动态网站地图,最近爬行器对ajax加载的内容越来越敏感。(ii)抱歉,模板应具有style=“display:none;”。您可以创建助手(和razor回调)来构建此代码块。我找不到.NET版本的Mustache。主页上提到了所有其他语言,除了!