c# 코어 asp.net 양식의 확인란을 계산하는 방법



비주얼 스튜디오 asp net (6)

이것을 사용하십시오 :

foreach (HtmlElement element in webBrowser1.Document.All)
{
    System.Web.UI.HtmlControls.HtmlInputCheckBox _cbx = element as System.Web.UI.HtmlControls.HtmlInputCheckBox;
    if (_cbx != null)
    {
        if (_cbx.Checked)
        {
            //Do something: 
            Response.Write(_cbx.Name + " was checked.<br />");
        }
    }
}

ASP.NET :

<asp:Panel ID="pnlFilter" runat="server">
    <div class="dvFilter">
        <input type="checkbox" id="cb01" checked="checked" />
        <label for="cb01">All</label>
    </div>
    <div class="dvFilter">
        <input type="checkbox" id="cb02" checked="checked" />
        <label for="cb02">None</label>
    </div>
</asp:Panel>

기음#:

foreach (Control item in this.form1.Controls)
{
    System.Web.UI.HtmlControls.HtmlInputCheckBox _cbx = item as System.Web.UI.HtmlControls.HtmlInputCheckBox;
    if (_cbx != null)
    {
        if (_cbx.Checked)
        {
            //Do something: 
            Response.Write(_cbx.Name + " was checked.<br />");
        }
    }

}

_cbx 변수에 null 값이 나타 _cbx .

입력 된 모든 입력 유형 체크 박스의 ID를 가져올 수 있도록 어떻게 업데이트 할 수 있습니까?

나는이 대답을 시도 : 양식의 TextBoxes 및 CheckBoxes의 수를 세지 만 나를 위해 일하지 않았다.


문제는 귀하의 확인란이 서버에서 실행되지 않는다고 생각합니다. 따라서 코드 숨김에 "할당"된 컨트롤이 없습니다. 확인란 runst = "server"속성을 추가하십시오. 당신이 당신의 패널에있는 것처럼.


프런트 엔드 프로세스를 통해 프런트 엔드에 액세스하는 것이 더 좋을 것이라고 생각합니다.

예를 들어 JQuery에서 필요로하는 체크 된 체크 박스 ID를 수집하여 HiddenField 저장 한 다음 요청에 따라 백엔드로 가져옵니다.

<asp:Panel ID="pnlFilter" runat="server">
    <div class="dvFilter">
        <input type="checkbox" id="cb01" checked="checked" />
        <label for="cb01">All</label>
    </div>
    <div class="dvFilter">
        <input type="checkbox" id="cb02" checked="checked" />
        <label for="cb02">None</label>
    </div>
    <input type="hidden" id="hdfIds" name="hdfIds" />
</asp:Panel>
<asp:Button ID="Button1" runat="server" Text="Button" />

JQuery 파트 (링크 JQuery와 json2 lib 먼저)

function recoverCbxStatus() {
    if (hdfIds.value) {
        var ids = JSON.parse(hdfIds.value);
        ids.forEach(function (id) {
            $('#' + id).prop('checked', true);
        });
    }
}

function refreshIds() {
    var ids = [];
    $('input:checkbox[id^="cb"]:checked').each(function () {
        ids.push($(this).attr("id"));
    });
    hdfIds.value = JSON.stringify(ids);
}

$(document).ready(function () {
    recoverCbxStatus();
    refreshIds();
});

$('input:checkbox[id^="cb"]').change(function () {
    refreshIds();
});

백엔드 (Nuget Json.NET)

protected void Page_Load(object sender, EventArgs e)
{
    string idsJson = Request["hdfIds"];
    List<string> ids;
    if (idsJson != null)
    {
        ids = JsonConvert.DeserializeObject<List<string>>(idsJson);
        Response.Write("count: " + ids.Count);
    }
}

GridView를 사용할 수 있습니다. 그리고 코드면에서는이 작업을 수행합니다.

for (int i = 0; i < **yourGridViewId** .Rows.Count; i++)
    {

CheckBox cb = ((CheckBox)**yourGridViewId** .Rows[i].FindControl(" **yourCheckboxId**"));
....

}

<input type="checkbox"> 를 사용하려면 DOM을 구문 분석해야합니다.

<input type="checkbox"> 대신 <asp:CheckBox> 사용하는 것이 좋습니다. 그런 다음 C #에서 컨트롤에 액세스 할 수 있습니다.

귀하의 조회 :
var _cbx = item as System.Web.UI.WebControls.CheckBox;

모든 컨트롤을 반복하지 않고 모든 확인란을 가져올 수 있습니다.
LINQ 사용 :
this.form1.Controls.Where(c=>c.GetType() == typeof(CheckBox))


먼저 runat="server" 를 추가하거나 asp:CheckBox 컨트롤로 변경해야합니다.

그러나 당신이 그들을 추가하면 찾을 수없는 이유는 그들이 다른 통제에 있기 때문입니다. 그래서 그들을 pnlFilter 에서 pnlFilter .

<asp:Panel ID="pnlFilter" runat="server">
    <div class="dvFilter">
        <input type="checkbox" id="cb01" checked="checked" runat="server" />
        <label for="cb01">All</label>
    </div>
    <div class="dvFilter">
        <input type="checkbox" id="cb02" checked="checked" runat="server" />
        <label for="cb02">None</label>
    </div>
</asp:Panel>

코드 숨김

foreach (Control item in pnlFilter.Controls)
{
    HtmlInputCheckBox _cbx = item as HtmlInputCheckBox;
    if (_cbx != null)
    {
        if (_cbx.Checked)
        {
            //Do something: 
            Response.Write(_cbx.Name + " was checked.<br />");
        }
    }
}




webforms