2015-10-18 3 views
-3

Я пытаюсь сделать все элементы управления TextBox доступными только на моей странице .aspx. Я написал это в моей странице aspx.cs:Реализация логики от aspx.cs до страницы aspx

private void SetTextBoxReadOnly(Control parent, bool readOnly) 
{ 
    // Get all TextBoxes and set the value of the ReadOnly property. 
    foreach (var tb in parent.Controls.OfType<TextBox>()) 
    tb.ReadOnly = readOnly; 

    // Recurse through all Controls 
    foreach(Control c in parent.Controls) 
    SetReadOnly(c, readOnly); 
} 

Очевидно, у меня есть тонны TextBoxes на странице .aspx, такие как этот:

   <div class="form-group"> 
        <asp:Label runat="server" AssociatedControlID="txtTimePointsExplained" CssClass="col-md-2 control-label">Explain why these time points:</asp:Label> 
        <div class="col-md-10"> 
         <asp:TextBox ID="txtTimePointsExplained" TextMode="MultiLine" Rows="8" runat="server" CssClass="form-control"></asp:TextBox></div> 
       </div> 

Очевидно, что это не делает мои текстовые поля доступен только для чтения , Я не думаю, что в логике есть что-то неправильное, что заставляет меня думать, что это не интерпретируется страницей .aspx.

+0

Что-нибудь вызывает 'SetTextBoxReadOnly'? Что делает 'SetReadOnly'? Когда вы выполняете это в отладчике, действительно ли он находит элементы управления текстовыми полями? – David

+0

Ничто не вызывает метод на странице .aspx. Я не знаю, как это сделать, поэтому исходный вопрос. I -think- SetReadOnly должно быть именем исходного метода SetTextBoxReadOnly, но я мог ошибаться. – Arcus

+0

Ну, для того, чтобы вызвать метод, вы должны * вызывать * его. Поэтому вам нужно на самом деле * вызвать этот метод * где-нибудь. Что касается 'SetReadOnly', если вы на самом деле не определяете этот метод, это даже не будет компилироваться. Если он определен, вам может потребоваться хотя бы * посмотреть его *, прежде чем выполнять его на своей странице. – David

ответ

0

Существовал ошибка в исходном фрагменте кода:

private void SetTextBoxReadOnly(Control parent, bool readOnly) 
{ 
    // Get all TextBoxes and set the value of the ReadOnly property. 
    foreach (var tb in parent.Controls.OfType<TextBox>()) 
    tb.ReadOnly = readOnly; 

    // Recurse through all Controls 
    foreach(Control c in parent.Controls) 
    SetReadOnly(c, readOnly); 
} 

Здесь:

SetReadOnly(c, readOnly); 

должен быть оригинальный метод:

SetTextBoxReadOnly(c, readOnly); 

Как сказал Давид в комментарии вызывать этот метод на странице (во время загрузки) Вызовите этот метод в методе Page_Load:

protected void Page_Load(object sender, EventArgs e) 
    { 
     SetTextBoxReadOnly(this, true); 
    } 
Смежные вопросы