c# - Как подсчитать флажки в форме asp.net




checkbox webforms (5)

Вам нужно проанализировать DOM, если вы хотите использовать <input type="checkbox"> .

Советуем использовать <asp:CheckBox> вместо <input type="checkbox"> . Затем вы можете получить доступ к своим элементам управления с помощью c #

В вашем поиске:
var _cbx = item as System.Web.UI.WebControls.CheckBox;

Вы можете получить все флажки без перебора всех элементов управления.
Используйте LINQ:
this.form1.Controls.Where(c=>c.GetType() == typeof(CheckBox))

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>

C #:

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 />");
        }
    }

}

Я получаю значение null для переменной _cbx .

Как я могу его обновить, поэтому я могу получить идентификатор всех checked флажков типа ввода.

Я попробовал этот ответ: подсчитайте количество текстовых полей и флажков в форме, но также не помог мне.


Вы можете использовать GridView. И кодовая сторона делает это -

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

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

}

Прежде всего, вам нужно добавить runat="server" или изменить их на asp:CheckBox .

Но причина, по которой вы не можете найти их, если вы их добавите, состоит в том, что они находятся в другом контроле. Поэтому ищите их в 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 />");
        }
    }
}

Я считаю, что проблема в том, что ваши флажки не запускаются на сервере. Таким образом, они не имеют никакого контроля, «назначенного» в коде. Попробуйте добавить в свои флажки атрибут runat = "server". Так же, как у вас в панели.


Я думаю, что было бы лучше получить доступ к интерфейсу через интерфейсный процесс.

Например, соберите контрольные флажки, необходимые вам JQuery, и сохраните их внутри 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();
});

Back-end (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);
    }
}




webforms