加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – RadComboBox中的重音不敏感搜索

发布时间:2020-12-16 07:42:19 所属栏目:asp.Net 来源:网络整理
导读:我对使用ASP webforms和Telerik相对较新,但我正在寻找一种允许我在RadComboBox中输入特殊字符(é,ù,à,…)的方法. 假设我的ObjectDataSource中有一个名为“RenéTomebody”的名字.我需要通过搜索“Rene”和“René”来找到他,但到目前为止还没有运气. 在应
我对使用ASP webforms和Telerik相对较新,但我正在寻找一种允许我在RadComboBox中输入特殊字符(é,ù,à,…)的方法.

假设我的ObjectDataSource中有一个名为“RenéTomebody”的名字.我需要通过搜索“Rene”和“René”来找到他,但到目前为止还没有运气.

在应用程序中,他们设法在具有过滤器的RadGrid上执行此操作,但据我所知,同样的解决方案对RadComboBox不起作用.

他们在RadGrid中使用的解决方案:http://www.telerik.com/forums/accent-insensitive-filtering-filtering-on-a-different-column#YS1QT8P1U0-cRPFNfjvDzA

解决方法

我无法访问后端组件,但您链接的演示包含前端代码,看起来您可以在那里进行攻击.看起来这个控件可能只是客户端服务器和客户端.对于客户端,只有黑客看起来有点复杂并且需要非公共API(_onInputChange)但是对于客户端 – 服务器情况(可能是你的情况),client side of RadComboBox Object上的文档提到了requestItems方法,所以黑客攻击它可能是合理的未来安全:

var hackRadComboBoxFilter = function (combobox,filterProcessingFunction) {
    var oldRequestItems = combobox.requestItems;

    combobox.requestItems = function() {
        var args = Array.prototype.slice.call(arguments);
        // requestItems has several arguments but the text seems to be the
        // first one,so let's modify it and call the original method
        var origFilter = args[0];
        args[0] = filterProcessingFunction(origFilter);
        oldRequestItems.apply(this,args);
    }
};

不幸的是,我不知道在JS中处理重音的内置方法,但你也可以在这里破解一些简单的东西:

var accents = 'àá????àáa???òó?????òó????èéê?èéê?e??Dìí??ìí??ùú?üùú?ü??????y??';
var mappedAccents = "AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZz";
var removeAccents = function (origStr) {
    var components = [];
    var len = origStr.length;
    var afterLastAccent = 0;
    for (var i = 0; i < len; i++) {
        var mapPos = accents.indexOf(origStr[i]);
        if (mapPos != -1) {
            components.push(origStr.substr(afterLastAccent,i - afterLastAccent) + mappedAccents[mapPos]);
            afterLastAccent = i + 1;
        }
    }
    if (afterLastAccent < len)
        components.push(origStr.substr(afterLastAccent,len - afterLastAccent));
    return components.join('');
};

所以现在你可以将它组合成这样的东西:

// In real app you probably want something like this
// var targetComboBox = $find("<%= RadComboBox1.ClientID %>");
// but for test let's just hack first combobox on the page
var targetComboBox = Telerik.Web.UI.RadComboBox.ComboBoxes[0];
hackRadComboBoxFilter(targetComboBox,removeAccents);

或者如果要修改页面上的所有组合框,可以使用相同的技巧更改原型:

hackRadComboBoxFilter(Telerik.Web.UI.RadComboBox.prototype,removeAccents)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读