0

在我的整个应用程序中,我想将 Razor 用于与阅读相关的所有功能,并利用 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到每个编辑控件并使用淘汰属性绑定重新启用它......想法?

另外 - 欢迎就这种方法的“适当性”提供反馈。

4

1 回答 1

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();
于 2013-09-21T03:58:17.880 回答