2013-08-27 50 views
0

我已經搜索了所有討論此問題的主題,並且似乎無法找到一個使用Asp.net C#解釋問題的方法,所有內容都是javascript或MVC或PHP我推理的原因,這個。輸入控件類型複選框始終爲真

我有2個輸入控件類型複選框

<input runat="server" type="checkbox" name="chkChildSexMale" id="chkChildSexMale" /> 
<input runat="server" type="checkbox" name="chkChildSexFemale" id="chkChildSexFemale"/> 
    <asp:Button ID="btnSaveCheckBoxes" runat="server" Text="Save CheckBox" OnClick="btnSaveCheckBoxes_Click" /> 

* 在我的按鈕單擊事件EDITED **

protected void SaveCheckBoxes() 
{ 
    if (chkChildSexMale.Checked) 
     { 
      do something 
     } 
     else if (chkChildSexFemale.Checked) 
     { 
      do something else 
     } 

} 

然後我把這個方法

protected void btnSaveCheckBoxes_Click(object sender, EventArgs e) 
{ 
SaveCheckBoxes(); 
} 
+3

擺脫'名字= 「」 – SLaks

+0

我改了名字,但是沒有解決問題chkChildSexMale.Checked總是成立的,即使它沒有被檢查 –

回答

0

我的問題是在頁面加載我是用我的數據讀取器來設定基於某些值的複選框。當我點擊我的按鈕時,點擊它就結束了用數據庫中的值寫入我選擇的值。因此,我不得不添加的,如果(!Page.IsPostBack)

給予我提供它本來真的很難弄清楚,所以我感謝所有試圖幫助的信息

5

你應該 使用輸入類型廣播,不復選框,對於兩個相互排斥的選擇:

<input runat="server" type="radio" name="chkChildSex" value="male" id="chkChildSexMale" /> 
<input runat="server" type="radio" name="chkChildSex" value="female" id="chkChildSexFemale" /> 

當使用相同name屬性爲兩個複選框中,第二覆蓋第一個。當您爲兩個單選按鈕使用相同的name屬性時,它將它們關聯,並且該值是檢查項目的值。

+0

對於這個例子我可以使用單選按鈕,但是我有更多的行爲相同的複選框方式,我不能使用單選按鈕爲那些想知道爲什麼.checked屬性評估爲真,即使它沒有檢查。而且我更改了名稱也是唯一的,並且這仍然不起作用 –

1

雖然兩個複選框的id屬性不同,但name屬性是相同的。

另外,關於使用單選按鈕的建議最基於它看起來像你正在做的事情。

<input runat="server" type="radio" name="rdoChildSex" value="Male" /> 
<input runat="server" type="radio" name="rdoChildSex" value="Female" /> 

同樣,我會建議使用,當你需要的兩個選項之一之間挑上面的單選按鈕例子去。但是,如果你想獲得收音機一樣的功能的複選框,你可以試試這個...

<input runat="server" type="checkbox" name="chkChildSexMale" value="Male" OnCheckedChanged="Check_Clicked" /> 
<input runat="server" type="checkbox" name="chkChildSexFemale" value="Female" OnCheckedChanged="Check_Clicked"/> 

void Check_Clicked(Object sender, EventArge e) 
{ 
    var checkbox = ((CheckBox)sender);  

    if (checkbox.Value == "Male") 
    { 
     chkChildSexFemale.Checked = false; 
     chkChildSexMale.Checked = true; 
     do something... 
    } 
    else 
    { 
     chkChildSexMale.Checked = false; 
     chkChildSexFemale.Checked = ; 
     do something else... 
    } 
} 

上面的代碼確實應該覆蓋所有客戶羣。它甚至有點矯枉過正。但是應該工作。


試着改變你的代碼如下:

if (chkChildSexMale.Checked == true) 
    { 
     do something 
    } 
    else if (chkChildSexFemale.Checked == false) 
    { 
     do something else 
    } 
+0

對於本示例,我可能可以使用單選按鈕,但我有更多複選框的行爲方式相同,我無法使用單選按鈕進行選擇知道爲什麼。即使未檢查,已檢查的屬性也正在評估爲真。我更改了名稱也是唯一的,並且這仍然不起作用 –

+0

您的代碼在執行檢查?在PageLoad中? –

+0

按鈕點擊事件 –