在页面提交期间,altHTML属性在span标记上为空 - jQuery / ASP.NET

时间:2010-01-12 17:17:08

标签: asp.net jquery

我的页面上有一个隐藏的TextBox控件,可以使用jQuery更新span事件上的keyup标记。当页面回发到服务器时,innerHTML属性为空。

如何获取keyup事件期间设置的值?

客户端代码:

<script language="javascript" type="text/javascript">
    $(document).ready(function(){
        $('#MyHiddenTextBox').keyup(function(){
            if($(this).val().length > 0){
                SetSpanValue();
            }
        });
    });

    function SetSpanValue() {
        var mytext = $('#MyHiddenTextBox').val();
        $('#MySpanTag').html(mytext);
    }
</script>
<style type="text/css">
    .USBBox
    {
        position: absolute;
        left: -999em;
    }
</style>
<asp:TextBox ID="MyHiddenTextBox" runat="server" CssClass="USBBox"  />
<span id="MySpanTag" runat="server" enableviewstate="true" />
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />

服务器端代码

protected void btnSubmit_Click(object sender, EventArgs e)
{
    string x = MySpanTag.InnerHtml; //this is coming back empty
}

4 个答案:

答案 0 :(得分:3)

请记住,asp.net仍然建立在html表单提交之上,并且只有输入和选择标记的html表单才会提交回服务器。因此,您需要在更新范围的同时使您的javascript更新为某种类型的输入(隐藏可以正常工作)。

答案 1 :(得分:2)

跨度标记不会发回服务器,它们不是输入控件,无论runat还是enableviewstate设置如何。我建议在输入span标签时将数据输入到input元素中,然后在发生回发时可以访问该输入元素的值(TextBox / HiddenField等)。

答案 2 :(得分:1)

元素的内容不会在回发中发送到服务器。

所有EnableViewState="true"为您做的是跟踪对服务器上的InnerHtml 所做的更改

您需要将数据放入隐藏的输入中。

答案 3 :(得分:0)

除了你无法在回发上捕获跨度值这一事实(正如其他人已经回答的那样)...... ASP.Net不接受通过javascript为隐藏表单字段设置的值,因为它认为这是一个安全威胁。

我过去通过使表单字段可见而将其托管在隐藏的div中来解决这个问题。然后,您可以设置文本框的值,然后将其发回服务器。

<div style="display:none;"><asp:TextBox id="MyHiddenTextBox" runat="server" /></div>