基本上,aspx中的ajax
每隔1000毫秒从。WebMethod
(。static GetData()
中的public static int Percent { get; set; }
轮询.cs的值。属性声明为静态Percent
。我想要做的是点击btn1时,它会将值分配到ajax
,WebMethod static GetData()
从public static int PERCENT { get; set; }
[WebMethod]
public static string GetData()
{
return PERCENT ;
}
protected void btn1_Click(object sender, EventArgs e)
{
DownloadLibrary downloader = new DownloadLibrary();
downloader.DoWorkSynchronous();
bool isLibraryBusy = true;
while (isLibraryBusy)
{
PERCENT = library.returnValue();
isLibraryBusy = downloader.IsBusy();
}
}
获取值。
$(document).ready(function() {
$("#progressbar").progressbar();
setTimeout(updateProgress, 100);
});
function updateProgress() {
$.ajax({
type: "POST",
url: "Downloader.aspx/GetData",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function(msg) {
// Replace the div's content with the page method's return.
$("#progressbar").progressbar("option", "value", msg.d);
}
});
}
Percent
我想将值分配给Percent
,但遗憾的是,由于static
为Percent
,我无法执行此操作。如果我没有将static
声明为GetData
,则Percent
()函数无法验证ajax
是什么。对于GetData()
轮询,static
必须位于static
。如何为non-static function
中的{{1}}变量指定值?
答案 0 :(得分:3)
要引用static
成员,您必须在成员前面加上定义它的类的名称。
然而,不要这样做!
您的静态变量对于您的Web服务的每个用户都是通用的。您可能认为每个会话只有一个副本,但事实并非如此。同一个Web服务的所有用户都将有一个副本。
答案 1 :(得分:2)
使用类名称对静态方法的调用作为前缀。
Downloader.PERCENT = library.returnValue();
然而正如John指出的那样,除非你能保证你的应用程序只有一个并发用户,否则你不应该使用静态成员来完成这项任务。
更好的方法可能是将PERCENT数据存储在会话变量中。这样它只是每个会话的范围,而不是整个应用程序。
Session["Percent"] = library.returnValue();
然后改变你的网络方法:
[WebMethod]
public static string GetData()
{
return (string)Session["Percent"];
}