C# 如何使用代码停止方法的执行
我的控制器中有一个方法,我用ajax调用它。 可以经常调用该方法(取决于用户键入的速度)。 用户输入字母、单词。我希望在用户停止键入时调用该方法 方法的参数是用户编写的文本 在我看来,这个方法在很短的时间内被调用了很多次 是否有一种方法可以始终(在每个字母之后)调用该方法,但如果立即调用该方法,则该方法会立即停止执行 示例:用户将缓慢写入10个字母-该方法将被调用10次。C# 如何使用代码停止方法的执行,c#,asp.net-mvc,C#,Asp.net Mvc,我的控制器中有一个方法,我用ajax调用它。 可以经常调用该方法(取决于用户键入的速度)。 用户输入字母、单词。我希望在用户停止键入时调用该方法 方法的参数是用户编写的文本 在我看来,这个方法在很短的时间内被调用了很多次 是否有一种方法可以始终(在每个字母之后)调用该方法,但如果立即调用该方法,则该方法会立即停止执行 示例:用户将缓慢写入10个字母-该方法将被调用10次。 示例:用户将快速写入10个字母-该方法将在第10次调用,或者该方法将被调用10次,但将停止执行前9次,只完成第10次执行假设
示例:用户将快速写入10个字母-该方法将在第10次调用,或者该方法将被调用10次,但将停止执行前9次,只完成第10次执行假设您使用AJAX调用它,那么我认为您最好将逻辑放在客户端。考虑使用一些只在打字暂停后张贴Ajax调用的东西。 可以通过缓冲结果并将它们传递到该方法来实现这一点。基本上,通过将此方法包装在聚合器方法中,可以防止此方法一直触发
//... Class Impl
private string keys = String.Empty;
private readonly TimeSpan bufferDelay = new TimeSpan(100000);
private DateTime lastKeyPress = DateTime.UtcNow;
private void DoSomething(string text)
{
//do something to process text.
keys = String.Empty;
}
public void DoSomethingBuffer(string text)
{
keys =+ text;
var now = DateTime.UtcNow;
if((now-lastKeyPress) > bufferDelay)
{
DoSomething(keys);
}
lastKeyPress = now;
}
//... More Class Impl
您需要使用聚合时间窗口来找到一些感觉自然的东西,但它应该相对简单。您将调用DoSOmethingBuffer,而不是直接调用DoSomethign。您可以使用javascript计时器来实现这一点。下面是一个示例,在用户上次按键半秒后触发任何逻辑。 如果用户继续键入,则计时器将不断被取消:
$(function() {
var timer;
$(".typeAhead").keypress(function() {
if (timer != null)
clearTimeout(timer);
timer = setTimeout(function() {
// do ajax call
}, 500);
});
});
此代码段使用jquery,但您可以不使用它。只需使用
getElementById()
而不是选择器。是否使用jQuery进行ajax调用?是否手动实现“自动完成”?即使您没有实现自动完成,您也可以检查该自动完成是否实现了不执行任何操作,直到用户暂停键入您可以学习的行为。