Kentico 9 cms:cmsTextBox 占位符本地化

Kentico 9 cms:cmsTextBox placeholder localization

我复制了搜索框 Web 部件,以便进行更改。我正在尝试将本地化字符串添加到占位符属性。

这不起作用:

<cms:CMSTextBox ID="txtWord" runat="server" EnableViewState="false" MaxLength="1000"
  ProcessMacroSecurity="false" placeholder="<%= CMS.Helpers.ResHelper.GetString("kff.Search--PlaceHolderCopy")%>" />

这也不行:

<cms:CMSTextBox ID="txtWord" runat="server" EnableViewState="false" MaxLength="1000"
  ProcessMacroSecurity="false" placeholder='<%= CMS.Helpers.ResHelper.GetString("kff.Search--PlaceHolderCopy")%>' />

我有一个有效的 JS 代码段,但我希望避免在 JS 文件中复制。

  var $searchField = $('.searchTextbox');

  if ($('body').hasClass('ENCA')) {
    // search field placeholder copy      
    $searchField.attr('placeholder', 'Search For Stuff');
  }
  else {
    $searchField.attr('placeholder', 'Recherche');
  }

我可以将本地化字符串添加到服务器标记中吗,还是应该在后面的代码中完成。我也不确定代码背后的最佳位置,我看不到 Page_Load 块。

您可以在代码隐藏的 SetupControl 方法中添加以下行:

txtWord.Attributes.Add("placeholder", ResHelper.GetString("kff.Search--PlaceHolderCopy"));

您不能真正使用 <%= 语法来设置服务器端控件的属性。

此外,请注意 CMSTextBox 控件有一个 WatermarkText 属性,这可能正是您要查找的内容。它使用 AjaxControlToolkit 库中的 TextBoxWatermarkExtender 控件。

没有必要为了这么简单的事情而复制 webpart 和重复代码。只需为该 Web 部件创建一个不同的 webpart layout 并在面板上方添加以下代码:

<script runat="server">
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        txtWord.Attributes.Add("placeholder", ResHelper.GetString("yourstring"));
    }
</script>