我使用ASP webforms和Telerik相对较新,但我正在寻找一种允许我在slug = null
中输入特殊字符(é,ù,à,...)的方法。 / p>
假设我的RadComboBox
中有一个名为“RenéTomebody”的名字。我需要通过搜索“Rene”和“René”来找到他,但到目前为止还没有运气。
在应用程序中,他们设法使用过滤器在ObjectDataSource
上执行此操作,但就我所知,此相同的解决方案不适用于RadGrid
。
他们在RadComboBox
中使用的解决方案:http://www.telerik.com/forums/accent-insensitive-filtering-filtering-on-a-different-column#YS1QT8P1U0-cRPFNfjvDzA
答案 0 :(得分:0)
我无法访问后端组件,但您链接的演示包含前端代码,看起来您可以在那里进行攻击。看起来这个控件可能只是客户端服务器和客户端。对于客户端,只有黑客看起来有点复杂,并且需要非公共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 = 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñŠšŸÿýŽž';
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)