在我的应用程序中,我想将Razor用于与Reading相关的所有功能,并利用knockoutJS和AJAX进行CUD操作。
在我的个人资料视图中,我完成了以下操作:
<div>
<h4>About Me</h4>
<!-- ko if: !isEditingAboutMe() -->
<p>@Model.User.AboutMe</p>
@if (Model.CurrentUserCanEdit)
{
<a data-bind="click: editAboutMe">edit</a>
}
<!-- /ko -->
<!-- ko if: isEditingAboutMe() -->
@Html.TextBoxFor(model => model.User.AboutMe, new { data_bind = "value: aboutMe" })
<a data-bind="click: saveAboutMe">save</a>
<a data-bind="click: cancelAboutMe">cancel</a>
<!-- /ko -->
</div>
这样搜索引擎至少可以抓取内容,启用了javascript的用户可以执行CUD操作。我们的想法是,禁用javascript和搜索引擎的用户将获得一个可用的只读版本的应用程序,但不会显示编辑功能。
我上面的问题是 - 搜索引擎会看到编辑控件,因为它们包含在ko语句中。防止这种情况发生的最佳方法是什么?
我能想到的一个解决方案是为每个编辑控件添加display: none
并使用knockout属性绑定重新启用它...想法?
此外,欢迎提供有关此方法“正确性”的反馈。
答案 0 :(得分:2)
你要问的有两件事。
第一个问题:如何在搜索引擎中隐藏我页面上的特定内容?
每当某些内容点击您的网站时,它都会有一个用户代理字符串。这可以帮助您了解哪些浏览器连接到您的网站。当搜索引擎点击您的网站时,它会通过用户代理设置识别自己。
您可以在http://www.useragentstring.com/pages/Crawlerlist/
找到搜索引擎抓取工具的用户代理字符串列表您可以找到HttpContext.Current.Request.UserAgent
要隐藏搜索引擎中的控件,请使用razor针对所有已知搜索引擎抓取工具检查当前用户代理字符串。如果它是搜索引擎,则不要使用标记返回编辑控件。
第二个问题:如果没有启用JavaScript,我如何在浏览器中隐藏我页面上的特定内容?
您可以默认隐藏这些内容,然后使用javascript使其可见。
标记:
<a class="hideIfNoJS" data-bind="click: saveAboutMe">save</a>
CSS:
.hideIfNoJS { display: none }
JS:
$('.hideIfNoJS').show();