1

JavaScript変数をサーバー側に送信するためのリファレンスとして、このSOの回答を使用していました。ただし、そのソリューションを実装すると、すべてが JSalert()で正しく表示されますが、サーバーにアクセスしたときの非表示フィールドの値は常に空です。

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...
}

私が見逃しているものはありますか?

アップデート

非表示フィールドを asp: コントロールではなく、純粋な html フィールドに変更しようとしました。

<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>
4

1 に答える 1

2

バリデーターを介して HTML を実行します。フォームの値が特定のブラウザーで送信されない場合、無効な HTML を使用しているように思われ、それが問題の原因です。

HTML の問題を修正したら、その JavaScript を取り除き、単純に の値を使用できますinAction

W3C マークアップ検証サービス

奇妙な終了フォーム タグの問題があるとおっしゃいました。フォームをフォーム内に配置することはできないため、おそらくそれが問題の原因でした。

于 2013-09-30T13:46:34.893 に答える