2008-09-04 139 views
0

场景:您有一个应显示一系列图像中下一张图像的ASP.Net网页。如果1.jpg当前已加载,则刷新应加载2.jpg。
假设我会使用这段代码,你从哪里得到当前的图像名称。如何从ASP.Net网站获取当前图像名称?

string currImage = MainPic.ImageUrl.Replace(".jpg", ""); 
currImage = currImage.Replace("~/Images/", ""); 

int num = (Convert.ToInt32(currImage) + 1) % 3; 
MainPic.ImageUrl = "~/Images/" + num.ToString() + ".jpg"; 

上面的代码的问题是,使用的网页是图像设置为1.jpg的默认网站,所以加载的图像总是2.jpg。
因此,在加载页面的过程中,是否可以从页面属性中拉出最后使用的图像?

回答

5
int num = 1; 

if(Session["ImageNumber"] != null) 
{ 
    num = Convert.ToInt32(Session["ImageNumber"]) + 1; 
} 

Session["ImageNumber"] = num; 
0

你必须隐藏在HiddenField或ViewState的或类似的地方,最后的值...

5

您可以将数据存储在您的网页ViewState字典

因此,在你的Page_Load你可以写的东西像...

var lastPicNum = (int)ViewState["lastPic"]; 
lastPicNum++; 

MainPic.ImageUrl = string.Format("~/Images/{0}.jpg", lastPicNum); 

ViewState["lastPic"] = lastPicNum; 

你应该明白了。

如果你正在编写ASP.NET,仍然不明白的ViewState和网络形式是如何工作的,你应该从一开始读this MSDN article

了解的ViewState将有很多ASP.NET的帮助陷阱以及。

0

如果您需要将图像更改为序列中的下一个图像(如果按F5或类似的刷新按钮),则需要将最后的图像ID或其他内容存储在服务器端存储器或cookie中。使用会话变量或类似的。

0

这取决于你想要它持续多久(记住)最后查看的值。我最喜欢的选择是SESSION。

0

@chakrit

如果刷新页面,这是否真的有效?

我认为视图状态存储在页面上,并且必须在回发时发送到服务器,刷新不会发生。

0

@John ah对不起,我认为你的“刷新”意味着回传。

在这种情况下,只需使用Session变量即可。我建议你使用ViewState字典而不是Session,因为变量只用于单页,所以它不应该使用会话范围的变量,这是不好的做法。