javascript - 将 JavaScript 变量发送到 asp.net webforms 代码隐藏始终为空

标签 javascript asp.net webforms

我正在使用 this SO answer作为将 JavaScript 变量发送到我的服务器端的引用。然而,当我实现该解决方案时,JS alert() 中的一切都正确出现,但是当我访问服务器时我的隐藏字段的值始终为空。

JavaScript 和 HTML:

<script>
    function rblSelectionChange()
    {
        var selection = $('#inAction input:checked').val();
        var stuff = $('#<%= clientSelection.ClientID %>').val(selection);
        alert(stuff.val());
    }
</script>
<asp:HiddenField ID="clientSelection" runat="server" />
<div class="row-fluid">
    <asp:RadioButtonList runat="server" ID="inAction" ClientIDMode="Static">
        <asp:ListItem onClick="rblSelectionChange();" Value="RuEp" Text="I remember my <b>username</b>. Please email me a new <b>password</b>." />
        <asp:ListItem onClick="rblSelectionChange();" Value="ReEu" Text="I remember my <b>email</b>. Please email me my <b>username</b>." />
        <asp:ListItem onClick="rblSelectionChange();" Value="ReEup" Text="I remember my <b>email</b>. Please email me my <b>username</b> and a new <b>password</b>." />
    </asp:RadioButtonList>
</div>

在页面的提交事件中,我尝试获取值,但它是空的:

protected void btnActionSelect_Click(object sender, EventArgs e)
{
    string selection = clientSelection.Value;
    ...snip...
}

知道我错过了什么吗?

更新

我试图将我的隐藏字段更改为纯 html 字段,而不是 asp: 控件。

<input type="hidden" id="clientSelection" name="clientSelection" value="" />

我修改了代码隐藏如下:

private string _selection = "";
protected void Page_Load(object sender, EventArgs e)
{
    //_selection = clientSelection.Value.ToString();
    if (IsPostBack)
        _selection = Request.Form["clientSelection"];
}

对于值 Request.Form["clientSelection"],我仍然一无所获。但重要的是它适用于 Chrome、FF 和 IE10。我试图让它工作的浏览器是 IE 7 8 和 9。我完全被难住了。

更新2

根据请求,这是我在 IE10(浏览器和文档模式设置为 IE7)中检查页面时的来源

<DIV id=ctl00_cphBodyWithForm_htmActionSelect class=row-fluid>
    <P class=lead>Can't access your account? Please select from the following options: </P>
    <SCRIPT>
                function rblSelectionChange()
                {
                    var selection = $('#inAction input:checked').val();
                    var stuff = $('#ctl00_cphBodyWithForm_clientSelection').val(selection);
                    alert(stuff.val());
                }
    </SCRIPT>
    <INPUT id=ctl00_cphBodyWithForm_clientSelection type=hidden name=ctl00$cphBodyWithForm$clientSelection jQuery191034119593101524303="7"> 
    <DIV class=row-fluid>
        <TABLE id=inAction border=0>
            <TBODY>
            <TR>
             <TD><INPUT onclick=rblSelectionChange(); id=inAction_0 type=radio value=RuEp name=ctl00$cphBodyWithForm$inAction jQuery191034119593101524303="8"><LABEL for=inAction_0>I remember my <B>username</B>. Please email me a new <B>password</B>.</LABEL></TD>
             </TR>
             ...snip...
            </TBODY>
        </TABLE>
     </DIV>
     <DIV class=span12>
        <A class="submitButton roundedBR" href="javascript:__doPostBack('ctl00$cphBodyWithForm$ctl00','')">Continue &gt; </A>
     </DIV>
</DIV>

最佳答案

通过验证器运行您的 HTML。如果您的表单值未在某些浏览器中发布,则听起来您的 HTML 无效,这就是问题的根源。

一旦解决了 HTML 问题,就可以摆脱 JavaScript 并简单地使用 inAction 的值。

W3C Markup Validation Service

您提到您遇到了奇怪的关闭表单标记问题。表单不能放在表单中,所以这可能是您问题的根源。

关于javascript - 将 JavaScript 变量发送到 asp.net webforms 代码隐藏始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19055894/

相关文章:

javascript - 更改 sails.js EJS View 以使用 .html 扩展名而不是 .ejs 扩展名?

javascript - 日志仅显示四行数据之一

javascript - 如何在 javascript 的替换中循环遍历正则表达式的匹配项?

javascript - 使用索引数组过滤另一个数组

javascript - 如何在 JavaScript 中更改输入类型 ="file"名称

c# - 在使用母版页的 asp 内容上设置页面标题

Asp.net Web表单模型将 "Item"和 "BindItem"同时绑定(bind)到1个控件的多个属性/属性

javascript - LinkBut​​ton,如何防止用 "asp:LinkButton"双击?或在第一次点击后禁用 "asp:LinkButton"

asp.net - Request.Form 抛出异常

c# - 将纯 HTML 网格改造为 C# 网格