例如,我有这个剃刀视图
@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。
答案 0 :(得分:0)
你可以将整个可重复的(@foreach
)部分视为局部视图,这样当通过ajax调用控制器时,只需获取渲染的局部视图并推入页面。
您可以告诉您的ajax调用返回的预期内容类型是html。
因此,在你的控制器动作或ajax的不同动作中,你想要将它分开:
if(Request.IsAjaxRequest()) return Partial('myForeach',model);
该解决方案实现零重复。 ajax调用正在获取@foreach
所在的完全呈现的html。
这将是最直接的确保机器人只能看到正确呈现的页面。 (这假设您关注的机器人不会试图找出页面看起来像javascript后调整的内容)。