我得到"对象引用未设置为对象的实例"异常,在下一行代码中:
((HyperLink)Page.FindControl(id)).Visible = false;
可能是什么问题?
以下是我的代码中的示例:
的.aspx:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="FriendsList.aspx.cs" Inherits="Private_User_Social_FriendsList" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
</asp:Content>
<div class="FriendsProposal" runat="server">
<div class="FriendsProposal_Header">FriendsP</div>
<div id="FriendsProposalPH" class="FriendsProposalPH" runat="server"></div>
.aspx.cs:
public partial class Private_User_Social_FriendsList : System.Web.UI.Page
{
DBservices DBS = new DBservices();
protected void Page_Load(object sender, EventArgs e)
List<Friends> ListFriendsProposal = DBS.getFriendsProposal(User.Identity.Name.ToString());
foreach (Friends FRIndex in ListFriendsProposal)
{
string _FriendsOutput = FR_output(FRIndex);
HyperLink tempHL = new HyperLink();
tempHL.Text = _FriendsOutput;
tempHL.CssClass = "HyperLinkFriends";
tempHL.ID = FRIndex.UdName;
FriendsProposalPH.Controls.Add(new LiteralControl("<div style='height:32px' runat='server' >"));
FriendsProposalPH.Controls.Add(tempHL);
Button tempApprove = new Button();
tempApprove.Text = "Approve";
tempApprove.Click += new EventHandler(cmdUpdate_Click);
tempApprove.ID = FRIndex.UdName + "1";
FriendsProposalPH.Controls.Add(tempApprove);
FriendsProposalPH.Controls.Add(new LiteralControl("</div>"));
}
}
private void cmdUpdate_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
string _tempID = btn.ID;
string id = _tempID.Substring(0, _tempID.LastIndexOf('1'));
DBS.ApproveFriend(User.Identity.Name.ToString(), id);
btn.Visible = false;
((HyperLink)Page.FindControl(id)).Visible = false;
}
答案 0 :(得分:0)
runat="server"
属性,否则会抛出完全相同的异常。
不要忘记asp.net是请求 - 响应系统,您无法从服务器访问客户端控件。
如果控件未在服务器上运行,则在客户端将其接收到浏览器后,您无法更改它。
答案 1 :(得分:0)
由于您要将超链接添加到FriendsProposalPH
命名容器(我假设的占位符控件)而不是Page
命名容器,因此您应该在该命名容器上调用搜索方法,不是页面本身(此方法仅在当前命名容器中搜索)。
根据您提供的代码判断,超链接总是与按钮一起添加,因此访问正确的命名容器以及查找和隐藏超链接控件的最简单方法是:
btn.NamingContainer.FindControl(id).Visible = false;