如何从ASP.Net网站获取当前图像名称?

时间:2020-03-05 18:47:54  来源:igfitidea点击:

方案:我们有一个ASP.Net网页,该网页应显示一系列图像中的下一个图像。如果当前已加载1.jpg,则刷新应加载2.jpg。
假设我将使用此代码,我们将在哪里获得当前图像的名称。

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。
因此,在加载页面的过程中,是否可以从页面属性中拉出最后使用的图像?

解决方案

回答

我们必须将最后一个值隐藏在HiddenField或者ViewState或者类似的地方...

回答

我们可以将数据存储在页面的" ViewState"字典中

因此,在Page_Load中,我们可以编写类似...

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

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

ViewState["lastPic"] = lastPicNum;

你应该知道。

而且,如果我们正在编程ASP.NET,但仍然不了解ViewState和Web窗体如何工作,则应阅读此MSDN文章。

从一开始就了解ViewState也会对许多ASP.NET陷阱有所帮助。

回答

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

回答

int num = 1;

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

Session["ImageNumber"] = num;

回答

这取决于我们希望其保留(记住)最后一次查看的值的时间。我的首选是SESSION。

回答

@chakrit

刷新页面真的有效吗?

我以为viewstate已存储在页面上,必须在回发时发送到服务器,并且刷新不会发生。

回答

@John ah抱歉,我认为"刷新"意味着回发。

在这种情况下,只需使用Session变量即可。

仅供参考,我建议我们使用ViewState词典而不是Session,因为该变量仅在该单个页面内使用,因此它不应该使用整个会话范围的变量,这是一种不好的做法。