如何使用List作为在Session中保存的属性? [英] How to use List as attribute that saves in Session?

查看:80
本文介绍了如何使用List作为在Session中保存的属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

http://csharptuning.blogspot.com/2007/05/uploading- multiple-files.html

我正在尝试构建一个可以上传任意数量文件并作为电子邮件附件发送的网络表单。 我使用上面链接的指南。 但是,当我尝试构建我得到的代码时,"使用泛型类型'System.Collections.Generic.List< T>'
需要'1'类型参数"&NBSP;我不知道如何解决这个问题。 指南希望此属性将文件上载控件列表保存到会话[" AddedControls"]

I'm trying to build a webform that can upload any number of files and send as email attachment.  I use the guide linked above.  Howvever, when i try to build the code I get "Using the generic type 'System.Collections.Generic.List<T>' requires '1' type arguments"  I'm not sure how to fix this.  The guide wants this attribute to save a list of fileupload controls to Session["AddedControls"]

受保护列表已添加控件

{

get

{

if(Session [" AddedControls]] == null)

Session [" AddedControls" ] = new List();
$
return(List)Session [" AddedControls"];

}

set

{

会话[" AddedControls"] = value;

}

}

protected List AddedControls
{
get
{
if (Session["AddedControls"] == null)
Session["AddedControls"] = new List();
return (List)Session["AddedControls"];
}
set
{
Session["AddedControls"] = value;
}
}

 

完整代码

file_upload2.aspx.cs

file_upload2.aspx.cs

使用System;

使用System.Data;

使用System.Configuration;

使用System.Collections;

使用System.Collections.Generic;

使用System.Web;

使用System.Web.Security;

使用System.Web.UI;

使用System.Web.UI.WebControls;

使用System.Web.UI.WebControls.WebParts;

使用System.Web.UI.HtmlControls;

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;



公共场地tial class file_upload2:System.Web.UI.Page

{

    protected void Page_Load(object sender,EventArgs e)

    {

        if(!IsPostBack)

        {

        }
       

    }
    protected void btnSubmit_Click(object sender,EventArgs e)

    {

}


public partial class file_upload2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
        }
       
    }
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
}

   

    protected void Page_PreInit(object sender,EventArgs e)

{

foreach(在ControlControls中控制ctrl)

{

divFileUpload.C​​ontrols.Add(ctrl);

   
    protected void Page_PreInit(object sender, EventArgs e)
{
foreach (Control ctrl in AddedControls)
{
divFileUpload.Controls.Add(ctrl);

}
}



protected void btnUpload_Click(object sender,EventArgs e)

{

for(int i = 0; i< Request.Files.Count; i ++)

{

HttpPostedFile file =(HttpPostedFile)Request.Files [i];

if(file.ContentLength> 0)

{

try

{

file.SaveAs(Server.MapPath(" ../& quot;)+" \\tmp\\ " + file.FileName.Substring(file.FileName.LastIndexOf(" \\) ")+ 1));

}

catch(例外情况)

{

Response.Write ("" + ex.Message +"");

继续;

}

}

}

}


protected void btnUpload_Click(object sender, EventArgs e)
{
for (int i = 0; i < Request.Files.Count; i++)
{
HttpPostedFile file = (HttpPostedFile)Request.Files[i];
if (file.ContentLength > 0)
{
try
{
file.SaveAs(Server.MapPath("../") + "\\tmp\\" + file.FileName.Substring(file.FileName.LastIndexOf("\\") + 1));
}
catch (Exception ex)
{
Response.Write("" + ex.Message + "");
continue;
}
}
}
}

 

protected List AddedControls

{

获得

{

if(Session [" AddedControls"] == null)

Session [ " AddedControls"] = new List();
$
return(List)Session [" AddedControls"];

}

set

{

会话[" AddedControls"] = value;

}

}

protected List AddedControls
{
get
{
if (Session["AddedControls"] == null)
Session["AddedControls"] = new List();
return (List)Session["AddedControls"];
}
set
{
Session["AddedControls"] = value;
}
}



    protected void lnkAddMore_Click(object sender,EventArgs e)

{

FileUpload fileUpload = new FileUpload();

Literal lt = new Literal() ;
$
lt.Text ="< br />" ;;


    protected void lnkAddMore_Click(object sender, EventArgs e)
{
FileUpload fileUpload = new FileUpload();
Literal lt = new Literal();
lt.Text = "<br/>";

divFileUpload.C​​ontrols.Add(fileUpload);

divFileUpload.C​​ontrols.Add(lt);

divFileUpload.Controls.Add(fileUpload);
divFileUpload.Controls.Add(lt);

AddedControls.Add(fileUpload);

AddedControls.Add(lt);

}

AddedControls.Add(fileUpload);
AddedControls.Add(lt);
}



}


}

 

file_upload2.aspx

file_upload2.aspx

<%@ Page Language =" C#"  AutoEventWireup = QUOT;真"的CodeFile = QUOT; file_upload2.aspx.cs"继承= QUOT; file_upload2"标题= QUOT;文件上传" %>&
                     ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;


< div> FileName:

< asp:FileUpload ID =" FileUpload1" RUNAT = QUOT;服务器" />

< asp:LinkBut​​ton ID =" lnkAddMore" Text ='Add More ...'runat =" server"的OnClick = QUOT; lnkAddMore_Click" />< / ASP:LinkBut​​ton的>


< asp:Button ID =" btnUpload" RUNAT = QUOT;服务器"文本= [上载"的OnClick = QUOT; btnUpload_Click" />< br />


< div runat =" server" ID = QUOT; divFileUpload" /> < / div>< / div>

<%@ Page Language="C#"  AutoEventWireup="true" CodeFile="file_upload2.aspx.cs" Inherits="file_upload2" Title="Fileupload" %>
                                                           
<div>FileName:
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:LinkButton ID="lnkAddMore" Text='Add More...' runat="server" OnClick="lnkAddMore_Click" /></asp:LinkButton>
<asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" /><br />
<div runat="server" id="divFileUpload" /> </div></div>

推荐答案

您的教程不是一个非常好的信息来源。抱歉。

Your tutorial isn't a very good source of information. Sorry.

这不是ASP.NEt问题的正确论坛,你最好在http://forums.asp的专用ASP.NEt论坛上提问。 .net /

And this isn't the proper forum for ASP.NEt questions, you're better off asking your questions at the dedicated ASP.NEt forums at http://forums.asp.net/

而不是试试这个:

删除AddedControls属性,你不应该在会话中存储控件,而是使用ControlState来记住您之前添加了多少个控件,并在CreateChildControls方法中重新创建它们。

Remove the AddedControls property, you shouldn't store Controls in the session, instead use the ControlState to remember how many controls you've added previously and recreate them in the CreateChildControls method.

 

 
 public void AddUploadControl()
 {
  FileUpload fileUpload = new FileUpload();
  fileUpload.ID = "fileUpload_"+i;
  divFileUpload.Controls.Add(fileUpload);

  Literal lt = new Literal();
  lt.ID = "literal_"+i;
  divFileUpload.Controls.Add(lt);

  lt.Text = "<br/>";

  count++;
 }

 private int count = 0;

 protected override void OnInit(EventArgs e) {
  Page.RegisterRequiresControlState(this);
  base.OnInit(e);
 }

 protected override object SaveControlState() {
  return new object[]{ base.SaveControlState(), count };
 }

 protected override void LoadControlState(object state) {
  if (state != null) {
   savedState = (object[])state;
   base.LoadControlState(savedState[0]);
   count = (int) savedState[1];
  }
 }

 protected override CreateChildControls()
 {
  base.CreateChildControls();
  for (int i = 0; i < count; i++)
  {
   AddUploadControl();
  }
 }


这篇关于如何使用List作为在Session中保存的属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆