2013-07-31 57 views
5

Tôi đã thêm một CheckBox động trong asp.nettruy cập giá trị checkbox động tạo ra trong C#

CheckBox cb = new CheckBox(); 
cb.Text = "text"; 
cb.ID = "1"; 

Tôi có thể truy cập CheckBox này qua C# trong pageLoad bản thân, ngay sau tuyên bố trên mã. Nhưng khi tôi cố truy cập các giá trị này sau khi nhấn nút, tôi nhận được các giá trị null.

CheckBox cb1 = (CheckBox)ph.FindControl("1"); 
Response.Write(cb1.Text); 
    ph.Controls.Add(cb); 

(ph là một giữ chỗ) Bất kỳ một thể cho tôi biết whats sai ở đây?

+0

@mcalex chỉ là một văn bản – Athul

+0

Nếu bạn đang tạo cây điều khiển động, bạn phải làm như vậy bất kể nếu Page.IsPostback == đúng, bạn có thể xây dựng nơi bạn tạo các điều khiển đó (sự kiện nào) không? –

+0

bạn đã thêm hộp kiểm vào các contols chưa? –

Trả lời

1

Sau khi bạn nhấp vào nút, nó sẽ đăng lại trang sẽ làm mới trạng thái. Nếu bạn muốn các giá trị được kiên trì thì bạn sẽ cần phải đặt chúng ở bên trong ViewState hoặc tương tự.

private bool CheckBox1Checked 
{ 
    get { return (ViewState["CheckBox1Checked"] as bool) ?? false; } 
    set { ViewState["CheckBox1Checked"] = value; } 
} 

void Page_load(object sender, EventArgs e) 
{ 

    CheckBox cb = new CheckBox(); 
    cb.Text = "text"; 
    cb.ID = "1"; 
    cb.Checked = CheckBox1Checked; 
    cb.OnCheckedChanged += CheckBox1OnChecked; 
    // Add cb to control etc.. 
} 

void CheckBox1OnChecked(object sender, EventArgs e) 
{ 
    var cb = (CheckBox)sender; 
    CheckBox1Checked = cb.Checked; 
} 
+0

tại nút bấm Tôi thậm chí không thể tìm thấy các điều khiển này .. đó là những gì tôi đang cố gắng để sắp xếp ra – Athul

+0

IIRC khi bạn nhấp vào nút, tất cả các điều khiển sẽ bị xóa vì toàn bộ trang được đăng thông qua biểu mẫu. – Romoku

+0

Tôi thực sự muốn tồn tại những điều khiển tự động tạo ra có chính nó khi tôi nhấn nút..Là có bất kỳ công việc xung quanh sẽ làm các trick ... khác tôi hoàn toàn bị mất – Athul

2

Bạn cần tạo lại hộp kiểm mỗi khi trang đăng lại, trong sự kiện Page_Load, vì sự kiện được thêm động vào trang.

Sau đó, bạn có thể truy cập hộp kiểm này sau trong sự kiện nhấp nút.

// Hi ở đây được cập nhật mẫu mã ... Nguồn

<body> 
    <form id="frmDynamicControl" runat="server"> 
    <div> 
     <asp:Button ID="btnGetCheckBoxValue" Text="Get Checkbox Value" runat="server" 
      onclick="btnGetCheckBoxValue_Click" /> 
    </div> 
    </form> 
</body> 

mã sau

protected void Page_Load(object sender, EventArgs e) 
{ 
    CheckBox cb = new CheckBox(); 
    cb.Text = "text"; 
    cb.ID = "1"; 
    frmDynamicControl.Controls.Add(cb); 
} 

protected void btnGetCheckBoxValue_Click(object sender, EventArgs e) 
{ 
    CheckBox cb1 = (CheckBox)Page.FindControl("1"); 
    // Use checkbox here... 
    Response.Write(cb1.Text + ": " + cb1.Checked.ToString()); 
} 
+0

Tôi đã làm nó .. Ba dòng đầu tiên là tải trang bên trong. – Athul

0

tôi là một chút sau đó ở đây, nhưng tôi chỉ cần làm:

try{ 
if(Request.Form[checkboxId].ToString()=="on") 
{ 
//do whatever 
} 
}catch{} 

Nếu hộp kiểm không được chọn, hộp kiểm sẽ không xuất hiện trong yêu cầu Biểu mẫu, do đó, khối thử bắt được. Nhanh chóng, đơn giản, có thể tái sử dụng, mạnh mẽ và quan trọng nhất của nó, nó chỉ hoạt động!

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