如何在 BasePage 上定义 UploadFile 函数,以便可以在许多 aspx 页面上重用它

Posted

技术标签:

【中文标题】如何在 BasePage 上定义 UploadFile 函数,以便可以在许多 aspx 页面上重用它【英文标题】:How to define an UploadFile function on a BasePage so that it can be reused on many aspx pages 【发布时间】:2015-01-15 07:52:54 【问题描述】:

我正在尝试将 UploadFile 函数移动到 BasePage,以便我可以在许多 aspx 页面上重新使用它。我的原代码如下:

上传.aspx.cs

public partial class upload : CodeBasePage


protected void uploadFile_Click(object sender, EventArgs e)

   if (UploadImages.HasFiles)
    
   try
   
     foreach (HttpPostedFile uploadedFile in UploadImages.PostedFiles)
      
     //Upload stuff;
     
   ...

上传.aspx

<asp:FileUpload runat="server" ID="UploadImages" />
<asp:Button runat="server" ID="uploadedFile" Text="Upload" OnClick="uploadFile_Click"/>

到目前为止一切顺利。代码运行良好。

现在我想将uploadFile_Click 移动到BasePage (CodeBasePage) 以便我可以在许多aspx 页面上重复使用它。

我将以下内容移至 CodeBasePage 并声明了变量:

CodeBasePage.cs

public Button uploadedFile;
public FileUpload UploadImages;

protected void uploadFile_Click(object sender, EventArgs e)

   if (UploadImages.HasFiles)
    
   try
   
     foreach (HttpPostedFile uploadedFile in UploadImages.PostedFiles)
      
     //Upload stuff;
     
   ...

但显然我做错了什么。当我单击 aspx 页面上的上传按钮时,我收到“对象引用未设置为对象实例”的错误。

Line 292:            if (UploadImages.HasFiles)

任何建议将不胜感激。我认为问题在于如何将上传变量从upload.aspx页面发送到CodeBasePage.cs。

【问题讨论】:

【参考方案1】:

所以你在 CodeBasePage 类中缺少一个具体的 FileUpload 实例。

你有什么

public FileUpload UploadImages

仅供参考。您应该在构造函数中或稍后手动将其设置为具体实例。

对于upload.aspx 页面,您的具体实例是

<asp:FileUpload runat="server" ID="UploadImages" />

【讨论】:

有关如何实现该目标的更多详细信息/链接...我仍在学习过程中! 对于这个特定的控件,我将创建一个可重用的用户控件,而不是将其添加到基本页面中,您可以在此article 中找到更多详细信息。为了了解基本页面的内容,您可以通过简单的谷歌搜索找到许多文章。 (迟到的回复,但我希望它有所帮助) 事实上,我也有同样的想法,即使用用户控件是这种情况下的最佳选择。无论如何,谢谢你的提示。

以上是关于如何在 BasePage 上定义 UploadFile 函数,以便可以在许多 aspx 页面上重用它的主要内容,如果未能解决你的问题,请参考以下文章

web自动化针对PO模式进行二次封装之 basepage

selenium学习中级篇 -20封装BasePage基础类

selenium学习中级篇 -20封装BasePage基础类

Web自动化测试项目BasePage实现

web自动化之basepage/loginpage

Python+Selenium中级篇之7-把截图类方法封装到前面的BasePage.py