我的页面上有一个隐藏的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
}
答案 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>