【问题标题】: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 控件。

标签: javascript c# asp.net webforms inline-code


【解决方案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 在采取任何进一步行动之前,让我们检查stackoverflow.com/a/1992745/9212040 并确保您的未选中复选框也正确发送到服务器。如果不是这样,那么我会发布我的想法
  • 没有代码隐藏文件,但您的解决方案可以内联工作。感谢您的帮助阿曼!
猜你喜欢
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 2017-12-17
  • 2013-05-21
  • 2014-01-15
  • 1970-01-01
相关资源
最近更新 更多