【问题标题】:FindControl in DataList Edit Mode数据列表编辑模式下的 FindControl
【发布时间】:2010-10-18 22:33:02
【问题描述】:

作为一个新的 .net/C# web 初学者,当我尝试使用 FindControl 时,我总是被绊倒。 Blam-flat 在我的脸上。这是我当前的 FindControl 问题:

我有一个 .aspx 页面和表单,然后是 ajax updatePanel,在其中有我的 DataList (DataList1),它有一个 EditItemTemplate: 具有以下内容:

<EditItemTemplate>
<asp:Label ID="thumbnailUploadLabel" runat="server" text="Upload a new thumbnail image:"/><br />
<asp:FileUpload ID="thumbnailImageUpload" runat="server" />
<asp:Button ID="thunbnailImageUploadButton" runat="server" Text="Upload Now" OnClick="thumbnailUpload"/><br />
</EditItemTemplate>

在我后面的 C# 代码中,我有 fileUpload 对象的 OnClick 代码:

        protected void thumbnailUpload(object s, EventArgs e)

    {

    if (thumbnailImageUpload.HasFile)

      {

      //get name of the file & upload

          string imageName = thumbnailImageUpload.FileName;

          thumbnailImageUpload.SaveAs(MapPath("../../images/merch_sm/" + imageName));

          //let'em know that it worked (or didn't)
          thumbnailUploadLabel.Text = "Image " + imageName + "has been uploaded.";
         }
         else
         {
         thumbnailUploadLabel.Text = "Please choose a thumbnail image to upload.";
     }

所以我当然会为 FileUpload 和 Label 获得“对象引用未设置为对象的实例”。

在 OnClick 事件中处理这些控件之前,找到这些控件的正确语法是什么?

我使用 FindControl 的唯一方法是:

label thumbnailUploadLabel = DataList1.FindControl("thumbnailUploadLabel") as Label;

但这当然会引发“对象引用未设置为对象的实例”错误。非常感谢任何帮助。

(我还看到了“递归”代码,它可以让 FindControl 的使用变得更容易。哈!我对 C# 非常熟悉,以至于我什至不知道如何将它们合并到我的项目中。)

感谢大家观看本文。

【问题讨论】:

    标签: file-upload datalist findcontrol edititemtemplate


    【解决方案1】:

    我知道这已经很晚了,但我一直在寻找要回答的问题......你现在一定已经想通了,但仍然

    如果您在代码中添加这些行

    protected void thumbnailUpload(object sender, EventArgs e)
        {
            FileUpload thumbnailImageUpload =(FileUpload)DataList1.Items[DataList1.EditItemIndex].FindControl("thumbnailImageUpload");
            Label thumbnailUploadLabel = (Label)DataList1.Items[DataList1.EditItemIndex].FindControl("thumbnailUploadLabel");
            if (thumbnailImageUpload.HasFile)
            {
    
               //Your code here
    
            }
            else
            {
                thumbnailUploadLabel.Text = "Please choose a thumbnail image to upload.";
            }
        }
    

    这将为您正在编辑的行找到适当的控件...

    还要将您的 Datalist 排除在更新面板之外,因为更新面板与 FileUpload 不兼容。如果你这样做,代码将运行,但它总是将 thumbnailImageUpload.HasFile 显示为 False.

    【讨论】:

    • 嘿Pankaj,感谢您的回复。迟到总比永远好。我最终使用了类似于您在上面发布的代码。是的,我确实发现了 UpdatePanel 中的 FileUpload 问题,所以修复了,一旦我发现它们不能很好地配合使用。另外 - 我发现 Dean Brettle (www.brettle.com) 的 NeatUpload 是一个非常优雅的多文件上传对象 - 以防需要......
    猜你喜欢
    • 1970-01-01
    • 2015-09-13
    • 2020-05-08
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多