回发后未选中复选框
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 并确保您的未选中复选框也正确发送到服务器。如果不是这样,那么我会发布我的想法
没有代码隐藏文件,但您的解决方案可以内联工作。感谢您的帮助阿曼!以上是关于回发后未选中复选框的主要内容,如果未能解决你的问题,请参考以下文章
UpdatePanel 中的复选框列表在选中项目时触发完整的回发
滚动后未选中 ListView 适配器中的 Android 复选框