2012-07-12 39 views
14

tôi có thể để có được ID của tất cả các điều khiển của một trang và cũng có loại của họ, trong trang khi tôi in nó nó cho thấyKiểm tra cho các loại hình kiểm soát

myPhoneExtTxt Type:System.Web.UI.HtmlControls.HtmlInputText 

này được tạo ra dựa trên mã này

foreach (Control c in page) 
    { 
     if (c.ID != null) 
     { 
      controlList.Add(c.ID +" Type:"+ c.GetType()); 
     } 
    } 

Nhưng bây giờ tôi cần kiểm tra loại và truy cập văn bản trong đó nếu loại HtmlInput và tôi không hoàn toàn chắc chắn cách thực hiện điều đó.

Giống như

if(c.GetType() == (some htmlInput)) 
{ 
    some htmlInput.Text = "This should be the new text"; 
} 

làm thế nào tôi có thể làm được điều này, tôi nghĩ rằng bạn sẽ có được ý tưởng ?.

Trả lời

31

này cần được tất cả các bạn cần nếu tôi có được những gì bạn đang yêu cầu:

if (c is TextBox) 
{ 
    ((TextBox)c).Text = "This should be the new text"; 
} 

Nếu mục tiêu chính của bạn là chỉ cần thiết lập một số văn bản:

if (c is ITextControl) 
{ 
    ((ITextControl)c).Text = "This should be the new text"; 
} 

Để hỗ trợ một ẩn trường cũng như:

string someTextToSet = "this should be the new text"; 
if (c is ITextControl) 
{ 
    ((ITextControl)c).Text = someTextToSet; 
} 
else if (c is HtmlInputControl) 
{ 
    ((HtmlInputControl)c).Value = someTextToSet; 
} 
else if (c is HiddenField) 
{ 
    ((HiddenField)c).Value = someTextToSet; 
} 

Điều khiển/giao diện bổ sung sẽ phải được thêm vào logic.

+0

điều này có bao gồm nếu loại đầu vào bị ẩn không? – user1416156

+0

Thật không may, không. HiddenFields là những tên khốn khó chịu ở chỗ chúng không kế thừa từ nhiều thứ hữu dụng và phải được tính trực tiếp. Tôi đã chỉnh sửa câu trả lời của mình để bao gồm hỗ trợ. –

+0

Cũng xem xét sử dụng toán tử 'as' trong kiểu kiểm tra như thế này. –

Các vấn đề liên quan