这样的功能没有在滑块中实现。所以让我们定制一下。 首先,您需要下载工具包源代码。我们将修改两个文件(我会提供一个链接,CodePlex上对这些文件,所以你会很容易在溶液中找到它们):SliderExtender.cs和SliderBehavior_resource.pre.js
标记SliderExtender
类具有这种属性:[ParseChildren(typeof(ListItem), ChildrenAsProperties = true)]
private List<ListItem> items = new List<ListItem>();
[PersistenceMode(PersistenceMode.InnerProperty)]
[ExtenderControlProperty]
[ClientPropertyName("items")]
public List<ListItem> Items
{
get { return items; }
}
static SliderExtender()
{
if (!ScriptObjectBuilder.CustomConverters.ContainsKey(typeof(ListItem)))
{
ScriptObjectBuilder.CustomConverters.Add(typeof(List<ListItem>), SerializeItemsToJson);
}
}
private static string SerializeItemsToJson(object itemsParam)
{
var items = itemsParam as List<ListItem>;
if (items == null)
return null;
return "{" + string.Join(",", items.Select(item => string.Format("{0}: '{1}'", item.Value, item.Text))) + "}";
}
这就是服务器代码,所以我们来调整扩展器的客户端代码。
让我们从JavaScript代码开始。添加到身体Sys.Extended.UI.SliderBehavior
功能的这个项目:this._items = null;
,并加入到下面Sys.Extended.UI.SliderBehavior
功能代码原型:
get_items: function() {
return this._items;
},
set_items: function (value) {
if (Sys.Serialization.JavaScriptSerializer.serialize(this._items) != value) {
this._items = Sys.Serialization.JavaScriptSerializer.deserialize(value);
this.raisePropertyChanged('items');
}
}
然后,修改_calcValue
功能如下:
_calcValue: function (value, mouseOffset) {
var val;
if (value != null) {
if (!Number.isInstanceOfType(value)) {
if (this._items) {
for (var prop in this._items) {
if (this._items.hasOwnProperty(prop) && this._items[prop] === value) {
value = prop;
break;
}
}
}
//rest of function's code stays as it is
再上一个台阶 - 修复_ensureBinding
功能:
_ensureBinding: function() {
if (this._boundControl) {
var value = this._value;
var displayItem = this._items && this._items.hasOwnProperty(value) ? this._items[value] : null;
if (value >= this._minimum || value <= this._maximum) {
var isInputElement = this._boundControl.nodeName == 'INPUT';
if (isInputElement) {
this._boundControl.value = displayItem || value;
}
else if (this._boundControl) {
this._boundControl.innerHTML = displayItem || value;
}
}
}
}
毕竟改变了上面,重建解决方案,并将工具包DLL的参考添加到您的项目。此处使用修改滑块的示例。它仍然支持双向绑定(即从扩展器到标签,但不是从有界文本框到扩展器)。
<asp:TextBox ID="Slider1" runat="server" />
<br />
<ajaxToolkit:SliderExtender ID="SliderExtender1" runat="server" BehaviorID="Slider1"
TargetControlID="Slider1" Minimum="1" Maximum="3" BoundControlID="Slider1_BoundControl"
Steps="5">
<Items>
<asp:ListItem Value="1" Text="Low" />
<asp:ListItem Value="2" Text="Medium" />
<asp:ListItem Value="3" Text="High" />
</Items>
</ajaxToolkit:SliderExtender>
<asp:TextBox runat="server" ID="Slider1_BoundControl" />
<%--<asp:Label ID="Slider1_BoundControl" runat="server" Style="text-align: right" />--%>
我会尝试创建一个数组与您的值,然后让0对应于“低”,并显示在您的标签。 – Constanta 2013-04-11 11:52:30