Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.Net单选按钮失去ViewState_Asp.net_Postback_Viewstate_Radio Button - Fatal编程技术网

ASP.Net单选按钮失去ViewState

ASP.Net单选按钮失去ViewState,asp.net,postback,viewstate,radio-button,Asp.net,Postback,Viewstate,Radio Button,我不想使用RadioButtonList[RBL],因为RBL不允许子控件,在我的情况下,如果您选择一个选项,我想启用按钮旁边的文本框;是的,你可以用jQuery来移动文本框,但那太脏了!。我会选中一个,显式或通过自动回邮提交表单,CheckedChanged事件将永远不会触发。当重新加载页面时,这两个按钮都将被取消选中,而不管它们在非回发加载时的初始状态或表单提交之前的状态如何 我拿出复选框,把它简化成我能想到的最简单的例子。我把EnableViewState=true扔得到处都是,以防它在我

我不想使用RadioButtonList[RBL],因为RBL不允许子控件,在我的情况下,如果您选择一个选项,我想启用按钮旁边的文本框;是的,你可以用jQuery来移动文本框,但那太脏了!。我会选中一个,显式或通过自动回邮提交表单,CheckedChanged事件将永远不会触发。当重新加载页面时,这两个按钮都将被取消选中,而不管它们在非回发加载时的初始状态或表单提交之前的状态如何

我拿出复选框,把它简化成我能想到的最简单的例子。我把EnableViewState=true扔得到处都是,以防它在我找不到的地方被禁用

<form id="form1" runat="server" enableviewstate="true">
    <div>
        <asp:RadioButton ID="foo" Text="foo" runat="server" AutoPostBack="true" OnCheckedChanged="rbChanged" Checked="true" GroupName="foobar" EnableViewState="true" />
        <asp:RadioButton ID="bar" Text="bar" runat="server" AutoPostBack="true" GroupName="foobar"
            OnCheckedChanged="rbChanged" Checked="false" EnableViewState="true" />
        <asp:Label runat="server" ID="resultLbl" />
    </div>
</form>

protected void rbChanged(object sender, EventArgs e)
{
    if (foo.Checked) resultLbl.Text = "foo is checked";
    else if (bar.Checked) resultLbl.Text = "bar is checked";
    else resultLbl.Text = "neither is checked";
}

我已经测试了你的代码,效果很好。当您选择任一单选按钮时,标签将在回发期间更新,页面刷新时将显示正确的信息???

事实证明,这是因为我们有一个自定义适配器为单选按钮呈现HTML,或者准确地说,为所有System.Web.UI.WebControl.E呈现HTML。我们这样做的动机是因为.NET将在标签上放置一个disabled=disabled属性,输入是糟糕的HTML,更糟糕的是,实际上被IE解释为意味着什么!自己检查一下——写一个标签为disabled=disabled的HTML页面,并在FF和IE中测试

我们使用Reflector查看我们混淆的步骤与实际适配器的步骤,发现Name属性设置不正确。尽管它将给定组中的所有RB设置为相同的名称,但在我们有限的新解决方案测试用例中,它与在自定义适配器测试用例中的属性不同。当我们研究如何安全地生成它时,我们发现我们的回发突然起作用了


如果我们得到老板的许可,我们将把适配器提供给CSSFriendly,以防其他人使用这种东西。

在某些情况下,问题可能是由代码隐藏中的ScriptManager引起的

例如

在上述不同方法中使用相同的密钥名可能会导致单选按钮autopostback不工作。
我遇到了这个问题,所以任何有同样问题的人都可以解决他们的问题。

您发布的代码应该可以工作,但我不确定我是否很清楚它对您不起作用的地方。你能试着更好地解释一下吗?当我在页面中添加一对行为类似的复选框时,在FWIW下创建一个文件;它们工作正常。如果我在使用VS的即时窗口进行页面加载期间检查foo或bar,则当它不是回发时会检查foo,否则两个选项都不会检查。代码不起作用-结果标签从不包含任何文本,并且CheckedChanged事件rbChanged从不激发。您可能希望尝试删除页面并重新创建它。也许在调试和文件锁定之间,设计器文件变得一团糟。正如我在下面的回答所述,我在一个新的aspx页面中测试了您的精确代码,它运行良好。当您选择任意一个单选按钮时,页面将发回并更新标签。可能页面加载中的某些内容正在重置它?嗯。如果问题仍然存在,我将查看是否将页面复制到新的解决方案中。有趣的问题和解决方案。值得一提的是,我在过去使用过CSSFriendly适配器,遇到了比我想象的更多的小问题。有时候,拥有“完美”的html真的被高估了。最终,最终用户的可用站点是关键。他们可能不太关心有效的html。这是漂亮的标记和开发时间之间的平衡。通常,使用生成的标记框架(如ASP.NET)来确保完全有效的“最佳实践”html会带来很多麻烦。只有我的2美分。唯一的问题是IE“调暗”了被禁用的标签。就像将其淡入浅灰色,就像禁用的表单控件一样。这在一些背景色上基本上是不可能读取的,我们不想说我们不能使用背景色,因为我们无法控制HTML,因为这很糟糕还没有得到所有的扭结出来-它没有产生正确的组,如果你有一个命名容器考虑。MS有太多的内部方法!我认为问题在于任何禁用的控件都会丢失viewstate
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "DisplayMessage", "javascript: HideProcessingImage();", true);