我有一个Asp.Net页面(名为'PostAD'),它允许用户上传多达4张图片。文件上传按钮功能如下:
protected void btnUpload_Click(object sender, EventArgs e)
{
if ((ViewState["Img1"] != null) && (ViewState["Img2"] != null) && (ViewState["Img3"] != null) && (ViewState["Img4"] != null))
{
lblUploadMsg.Text = "You cannot upload more than 4 pictures";
return;
}
if (FileUpload1.HasFile)
{
//FileUpload1.Attributes.Clear();
string fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName);
if (fileExtension.ToLower() == ".jpg")
{
int fileSize = FileUpload1.PostedFile.ContentLength;
if (FileUpload1.PostedFile.ContentLength < 2097152)
{
//FileUpload1.SaveAs(Server.MapPath("~/Temp/" + FileUpload1.FileName));
//Response.Write("Successfully Done");
string sp = Server.MapPath("~/ItemPictures/");
String fn = Guid.NewGuid().ToString() + FileUpload1.FileName.Substring(FileUpload1.FileName.LastIndexOf("."));
if (sp.EndsWith("\\") == false)
sp += "\\";
sp += fn;
FileUpload1.PostedFile.SaveAs(sp);
lblUploadMsg.ForeColor = System.Drawing.Color.Green;
lblUploadMsg.Text = "Picture Uploaded successfully. You can upload upto 4 pictures";
if (ViewState["Img1"] == null)
{
ViewState["Img1"] = "~/ItemPictures/" + fn;
}
else if (ViewState["Img2"] == null)
{
ViewState["Img2"] = "~/ItemPictures/" + fn;
}
else if (ViewState["Img3"] == null)
{
ViewState["Img3"] = "~/ItemPictures/" + fn;
}
else if (ViewState["Img4"] == null)
{
ViewState["Img4"] = "~/ItemPictures/" + fn;
}
}
else
{
lblUploadMsg.Text = "Maximum 2MB files are allowed";
}
}
else
{
lblUploadMsg.Text = "Only JPG files are allowed";
}
}
else
{
lblUploadMsg.Text = "No File was Selected";
}
ShowAvailblImgs();
}我有四个Asp.Net图像在页面加载时是不可见的。为了向他们展示,我有以下代码。
private void ShowAvailblImgs()
{
if (ViewState["Img1"] != null)
{
//The string URL variable is used just to show what value ViewState["image1"] currently has.
string URL = (string)ViewState["img1"];
Response.Write(URL);
Image1.ImageUrl = (string)ViewState["img1"];
Image1.Width = 130;
Image1.Height = 130;
Image1.Visible = true;
}
else
Image1.Visible = false;
if (ViewState["Img2"] != null)
{
Image2.ImageUrl = (string)ViewState["img2"];
Image2.Width = 130;
Image2.Height = 130;
Image2.Visible = true;
}
else
Image2.Visible = false;
if (ViewState["Img3"] != null)
{
Image3.ImageUrl = (string)ViewState["img3"];
Image3.Width = 130;
Image3.Height = 130;
Image3.Visible = true;
}
else
Image3.Visible = false;
if (ViewState["Img4"] != null)
{
Image4.ImageUrl = (string)ViewState["img4"];
Image4.Width = 130;
Image4.Height = 130;
Image4.Visible = true;
}
else
Image4.Visible = false;
}我有非常奇怪的ViewState变量的行为。在加载图像时,它们不会在Asp.Net图像控件中显示。相反,会显示空的图像区域。虽然我使用URL变量打印图像的确切路径。在保存图像(实际上是空白图像区域)时,它会保存我的.aspx页面。我使用的是Session变量,它工作得很好,但是由于一些原因,我想使用ViewState变量。
发布于 2013-08-26 21:44:58
ViewState很好。ViewState索引字符串使用不同的大小写,因此它们不引用相同的ViewState属性。"img1“不等于"Img1”。
ViewState["Img1"] != null)
{
Image2.ImageUrl = (string)ViewState["img1"];我建议对值名称使用常量,如下所示。
const string image1 = "img1";
const string image2 = "img2";
const string image3 = "img3";
const string image4 = "img4";或者参考我的博客文章,使用扩展方法创建强类型的伪属性。http://coding.grax.com/2013/06/simple-strongly-typed-pattern-for.html
发布于 2013-08-26 20:43:29
我不想说错话,但是,从文件中读到,我写的是
"Viewstate用于保留往返行程之间的页和控制值“,http://msdn.microsoft.com/en-us/library/ms178198(v=vs.85).aspx
您是否尝试过将URL放入变量中,然后将URL赋值给ViewState"imgX",然后尝试进行另一次回发并查看ViewState"imgX“是否包含该URL?
https://stackoverflow.com/questions/18452075
复制相似问题