Следуя руководству по созданию видеоплеера, я адаптировал его для создания элемента управления диапазоном HTML5.Вот мой код:
namespace CustomServerControls
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:Range runat=server ID=Range1></{0}:Range>")]
public class Range : WebControl
{
public int Min { get; set; }
public int Max { get; set; }
public int Step { get; set; }
public int Value { get; set; }
protected override void RenderContents(HtmlTextWriter output)
{
output.AddAttribute(HtmlTextWriterAttribute.Id, this.ID);
output.AddAttribute(HtmlTextWriterAttribute.Width, this.Width.ToString());
output.AddAttribute(HtmlTextWriterAttribute.Height, this.Height.ToString());
if (Min > Max)
throw new ArgumentOutOfRangeException("Min", "The Min value cannot be greater than the Max Value.");
if (Value > Max || Value < Min)
throw new ArgumentOutOfRangeException("Value", Value,
"The Value attribute can not be less than the Min value or greater than the Max value");
if (Min != 0)
output.AddAttribute("min", Min.ToString());
if (Max != 0)
output.AddAttribute("max", Max.ToString());
if (Step != 0)
output.AddAttribute("step", Step.ToString());
output.AddAttribute("value", Value.ToString());
output.AddAttribute("type", "range");
output.RenderBeginTag("input");
output.RenderEndTag();
base.RenderContents(output);
}
}
}
Как видите, очень простой, и он работает настолько, насколько способен задавать отдельные свойства.
Если я отправлю сообщение обратно, чтобы проверить текущее значение, элемент управления вернет свои свойства обратно к значению по умолчанию (0).Я полагаю, что это проблема состояния.Кто-нибудь видит что-то, чего мне не хватает в приведенном выше коде, чтобы заставить эту работу работать правильно?
Редактировать:
Я заметил, что эта разметка отображается на странице:
<span id="Range1" style="display:inline-block;">
<input id="Range1" min="1" max="100" value="5" type="range">
</span>
Что, очевидно, неправильно, я не хочу, чтобы был создан тег span, а элемент управления вводом не имеет имени.Поэтому, когда я выполняю обратную передачу, я не получаю данные от элемента управления.