Вопрос

У меня есть три элемента управления текстовым полем на странице

<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"
        OnTextChanged="TextBox_TextChanged" TabIndex="1">
<asp:TextBox ID="TextBox2" runat="server" AutoPostBack="True"
        OnTextChanged="TextBox_TextChanged" TabIndex="2">
<asp:TextBox ID="TextBox3" runat="server" AutoPostBack="True"
        OnTextChanged="TextBox_TextChanged" TabIndex="3">

и обработчик событий

protected void TextBox_TextChanged(object sender, EventArgs e)
{
    WebControl changed_control = (WebControl)sender;

    var next_controls = from WebControl control in changed_control.Parent.Controls
                        where control.TabIndex > changed_control.TabIndex
                        orderby control.TabIndex
                        select control;

    next_controls.DefaultIfEmpty(changed_control).First().Focus();
}

Смысл этого кода заключается в автоматическом выборе текстового поля со следующим TabIndex после обратной публикации страницы (см. Проблема Маленького Джей Би).На самом деле я получаю InvalidCastException, потому что невозможно выполнить приведение из System.Web.UI.LiteralControl (WebControl.Элементы управления фактически содержат LiteralControls) в System.Web.UI.WebControls.WebControl.

Меня интересует, можно ли как-то изменить этот подход, чтобы получить рабочее решение?Спасибо!

Это было полезно?

Решение

OfType

from control in changed_control
  .Parent
  .Controls
  .OfType<WebControl>()

Другие советы

Вы должны иметь возможность использовать метод OfType, чтобы возвращать элементы управления только заданного типа.

например ,

var nextcontrols = from WebControl control in     
                   Changed_control.Parent.Controls.OfType<TextBox>()... etc

Проблема в том, что LiteralControl не наследуется от WebControl. У него не может быть фокуса, поэтому можно не выбирать их. В своем операторе LINQ добавьте еще одну проверку условий для WebControl. Так что ваша строка where должна быть , где control.TabIndex > change_control.TabIndex & amp; & amp; Элемент управления WebControl .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top