我正在尝试创建一个在keydown上执行ac#函数的文本框,所以我订购了一个javascript函数来回发文本框的keydown事件,基本上,发生的事情是我在autopostback = true和c#函数上有文本框只有在框外点击时才会执行,因为自动回复,所以我想达到相同的目标,但没有点击外面,只有keydown。这是我的代码:
<script language="javascript" type="text/javascript">
function RefreshBox()
{
__doPostBack('<%= SomeTextBox.ClientID%>', '');
}
<asp:TextBox ID="SomeTextBox" runat="server" onkeydown="RefreshQueryBox();"
AutoPostBack="True" ValidationGroup="1"
ontextchanged="AutoText_TextChanged" ViewStateMode="Enabled"></asp:TextBox>
这里是.cs
protected void AutoText_TextChanged(object sender, EventArgs e)
{
// Some actions here
}
问题是,使用此代码,整个页面在keydown上刷新,用户无法键入。救命! :P
由于
答案 0 :(得分:0)
您的解决方案的问题在于,当您导致回复时,您基本上正在重新启动生命周期。这意味着您的数据也无法正确保留。我建议使用带有ajax的Web服务调用来执行您的操作。
function AutoText(){
$.ajax({
type: 'POST',
url: '../Services/UpdateService.asmx/AutoText',
data: '',
contentType: "application/json; charset=utf-8",
success: function (data) {
//use the data.d to get the info passed back from webservice. then
add your logic to update your html
},
error: function () {
//catch any bad data
}
});
}
你的后端方法应该是这样的。对象就是你的目标
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public Object GetLatest()
{
Object obj= new Object ();
obj.FirstName = "Dave";
obj.LastName = "Ward";
return obj;
}
如果您正在进行验证,我会建议jquery / javascript。虽然,你冒着某人不允许在他们的网络浏览器上使用javascript的风险,但你可以卸载服务器端的工作。