Javascript 客户端和服务器的ASP.NET MVC模板

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中。这不是很好,但我想知道这是否也可能。我使用的方法是使用一个带有通配符和/或类名的隐

这可能吗?以Facebook评论系统为例,说明我想要实现的目标。现有注释在服务器上呈现,但如果我留下新注释,它将在客户机上使用AJAX创建。理想情况下,我只希望将注释模板存储在一个地方,并且可以在服务器(由Razor呈现)和客户端(使用服务器返回的JSON以Javascript呈现)上访问它

有什么想法吗


编辑:我想另一个选择是坚持纯服务器端呈现,当用户发布新评论时,将呈现的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。主页上提到了所有其他语言,除了!