名称xxx在当前上下文中不存在

时间:2011-10-08 19:04:07

标签: c# asp.net controls

我正在使用asp.net的登录控件和Fileuploader。 当我将文件上传器控件保留在<LoggedInTemplate>之外它可以工作但是当我尝试在<LoggedInTemplate>内移动Fileuploader时,我得到“当前上下文中不存在名称xxx”并且它引用了C#。

<LoggedInTemplate>
    <b>Login ok ! </b><br />
        <asp:FileUpload ID="FileUpload1" runat="server" />
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
        InsertCommand="INSERT INTO aspnet_PicturesHome(pUrl) VALUES (@pUrl)"
        SelectCommand="SELECT pID, pUrl FROM aspnet_PicturesHome">
            <InsertParameters>
                <asp:ControlParameter Name="pUrl" Type="String" ControlID="FileUpload1" PropertyName="FileName"/>
            </InsertParameters>
        </asp:SqlDataSource>
<asp:Label ID="Label1" runat="server" Text="Label">Foto upload: </asp:Label>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Upload" />
<br></br>
</LoggedInTemplate>

2 个答案:

答案 0 :(得分:4)

主要修改:您可以像这样访问嵌套在LoginView中的控件:

FileUpload fu = LoginView1.FindControl("FileUpload1") as FileUpload;

如果它们在<LoggedInTemplate>中,您需要确保它们实际上已登录(反之亦然,以便访问<AnonymousTemplate>中的控件:它们不应该登录),否则它找不到控件,.FindControl()将返回null

参考:
http://www.velocityreviews.com/forums/t109239-accessing-a-control-within-loginview.html

编辑每个评论Page_Load(),如果初始请求(不是回发)检查用户是否为管理员,如果不是,则禁用上传控件

protected void Page_Load(object sender, EventArgs e){

if(!this.isPostBack)
{
  if(!Context.User.IsInRole("admin"))
  {
     //disable controls
  }
}
}

答案 1 :(得分:0)

您可能已创建了其他网页或网络表单。或者你可能只是重命名了webform的公共类。在Global.cs中,控件已注册或存在于您意外创建的第一个Web表单中。删除并创建粘贴您的代码,它会没事的