服务器端HTML呈现和客户端绑定策略,以避免重复

时间:2012-10-18 20:02:23

标签: javascript html asp.net-mvc knockout.js

例如,我有这个剃刀视图

@foreach (var item in Model)
{               

    <a href="@Item.Id">Hello world</a>
}

在客户端,我有这个用于绑定数据的小模板。

    var target = target.find("tbody");
    var markup = "<a href='${Id}'>Hello world<a>";

    $.template("tmpl", markup);
    var elm = $.tmpl("data", data);

此视图包含ASP.NET Razor语法。但是我经常会遇到一个场景,其中相同的视图模型可能会受到AJAX请求的影响,并通过一些基于Javascript的模板绑定到DOM,如Knockout或jQuert模板,CanJS或其他任何内容。

我不能像往常一样重复自己。那你的策略是什么?我不认为它只是使用客户端,因为它会影响我的SEO。

1 个答案:

答案 0 :(得分:0)

你可以将整个可重复的(@foreach)部分视为局部视图,这样当通过ajax调用控制器时,只需获取渲染的局部视图并推入页面。

您可以告诉您的ajax调用返回的预期内容类型是html。

因此,在你的控制器动作或ajax的不同动作中,你想要将它分开:

if(Request.IsAjaxRequest()) return Partial('myForeach',model);

该解决方案实现零重复。 ajax调用正在获取@foreach所在的完全呈现的html。

这将是最直接的确保机器人只能看到正确呈现的页面。 (这假设您关注的机器人不会试图找出页面看起来像javascript后调整的内容)。