回发后未选中复选框

Posted

技术标签:

【中文标题】回发后未选中复选框【英文标题】:Checkbox not Checked after Post Back 【发布时间】:2020-09-13 08:06:36 【问题描述】:

我正在处理一些遗留的内联 Web 表单代码。我添加了一个默认设置的复选框。问题是当复选框未选中时,提交表单时它仍会翻转为选中状态。每个人都没有页面事件处理程序。

javascript 中,如果我设置了一个警报,它会将值显示为空白,这在未选中复选框时是正确的。但是,提交表单时,复选框始终会恢复为选中状态。

标记:

<input type="hidden" id="inYard" name="inYard" runat="server" />
<input type='checkbox' id="excludeYard" name='excludeYard' onclick="CheckYardSelection()" 
    runat="server" />Include Items in Yard

JavaScript:

function CheckYardSelection()

    var yardCheckbox = document.getElementById('excludeYard');

    if (!yardCheckbox.checked) 
        document.getElementById('inYard').value = "";
    else
        document.getElementById('inYard').value = "Y";

C#:

<script runat="server">
...
    if(!String.IsNullOrEmpty(Request.Form["inYard"]))
    
        if (Request.Form["inYard"].ToString() == "Y")
        
            excludeYard.Value = Request.Form["inYard"].ToString();
            excludeYard.Checked = true;
        
    
...
</script>

【问题讨论】:

请告诉我们c#代码写在哪里?页面加载? 在脚本块中。就像我说的那样,每个人都没有页面事件处理程序。 您是否有特定的理由使用input 而不是asp:checkbox 它是遗留的内联代码,没有使用 ASP.NET 控件。 【参考方案1】:

您没有发布完整的代码,但如果您以这种方式实现所有内容,您应该不会再遇到此问题:

aspx 文件:

<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebForms._Default" %>

<script src="Default.js" language="javascript" type="text/javascript"></script>

<form runat="server">
    <input type="hidden" id="inYard" name="inYard" runat="server" />
    <input type='checkbox' id="excludeYard" name='excludeYard' onclick="CheckYardSelection()" runat="server" />

    <input type="submit" value="Post" />
</form>

隐藏代码:

public partial class _Default : Page

    protected void Page_Load(object sender, EventArgs e)
    
        if (!String.IsNullOrEmpty(Request.Form["inYard"]))
        
            if (Request.Form["inYard"].ToString() == "Y")
            
                excludeYard.Value = Request.Form["inYard"].ToString();
                excludeYard.Checked = true;
                // query += " AND IC.NewWellPad <> 'YARD'";
            
        
    

默认.js

function CheckYardSelection() 
    var yardCheckbox = document.getElementById('excludeYard');

    if (!yardCheckbox.checked)
        document.getElementById('inYard').value = "";
    else
        document.getElementById('inYard').value = "Y";

【讨论】:

我删除了checked和value属性,结果还是一样。还尝试使用隐藏变量来切换 C# 中的逻辑无济于事 - 在 JS 中设置的隐藏值在 C# 中为空。将更新问题,但问题仍然存在。 @IrishChieftain:请注意我回答的最后一段。这是至关重要的。您必须在页面的 JavaScript 代码的 Load 事件中设置复选框选中状态(值 =“Y”或不基于您当前的状态) 你能给我一个代码sn-p吗?我不是 100% 确定你所说的 JS 代码的加载事件是什么意思。 @IrishChieftain 在采取任何进一步行动之前,让我们检查***.com/a/1992745/9212040 并确保您的未选中复选框也正确发送到服务器。如果不是这样,那么我会发布我的想法 没有代码隐藏文件,但您的解决方案可以内联工作。感谢您的帮助阿曼!

以上是关于回发后未选中复选框的主要内容,如果未能解决你的问题,请参考以下文章

回发后未调用模态对话框的 onshow

UpdatePanel 中的复选框列表在选中项目时触发完整的回发

滚动后未选中 ListView 适配器中的 Android 复选框

回发时的 ASP.Net 复选框值错误?

Gridview 中 TemplateField 中的复选框在回发时丢失

回发后丢失 Bootstrap CSS