0

例如我有这个剃刀视图

@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。

4

1 回答 1

0

好吧,您可以将整个可重复 ( @foreach) 部分设置为部分视图,这样当通过 ajax 调用控制器时,它只会获取呈现的部分视图并推送到页面中。

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

因此,在您的控制器操作或 ajax 的不同操作中,您希望如何将其分开:

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

该解决方案实现了零重复。ajax 调用正在获取完全呈现的 html,这将是它所在的@foreach位置。

这将是确保机器人只能看到正确呈现的页面的最直接方法。(这假设您关心的机器人不会试图找出页面在 javascript 调整后的样子)。

于 2013-02-01T19:00:55.027 回答