我正在尝试从子页面访问母版页中的转发器,并继续为Master返回null。在母版页和子页面上尝试了不同的东西,没有任何工作,我看不出我做错了什么。
在母版页上,我有:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.Master.cs" Inherits="EA.SiteMaster" %>
在母版页的某处:
<asp:Repeater runat="server" ID="rptFavorites" OnItemDataBound="rptFavorites_ItemDataBound">
<ItemTemplate>
<li>
<span class="glyphicon glyphicon-heart">
<asp:LinkButton runat="server" ID="lbFavLink" />
</span>
</li>
</ItemTemplate>
</asp:Repeater>
然后在default.aspx中:
<%@ MasterType TypeName="EA.SiteMaster" virtualpath="../Site.master" %>
在default.aspx.cs中:
private void UpdateMaster()
{
Repeater rptFavorites;
rptFavorites = (Repeater)this.Master.FindControl("rptFavorites");
if (rptFavorites != null)
{
DataTable dtFavorites = Favorites.GetFavoritesByUserID(Session["UserID"].ToString());
rptFavorites.DataSource = dtFavorites;
rptFavorites.DataBind();
}
}
this.Master始终为null。我尝试将MaterPageFile保存为default.aspx中的MasterType:
<%@ Page Title="Home Page" Language="C#" MasterPageFile="../Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="EA._Default" %>
<%@ MasterType TypeName="EA.SiteMaster" virtualpath="../Site.master" %>
更新
我在default.aspx.cs中有一个web方法,由aspx文件中的js函数调用。 Web方法是静态的,所以我不能只调用UpdateMaster()并且必须先创建一个实例,所以我做了以下(见下面的代码)。这就是为什么当它到达UpdateMaster()时,它正在使用一个似乎没有母版页的新页面实例。另一方面,如果我不这样做,我不知道如何从web方法调用该函数。
[System.Web.Services.WebMethod]
public static string AddUserFavorite(string sURL, string sFriendlyName)
{
string sMsg = string.Empty;
string sUserID = HttpContext.Current.Session["UserID"].ToString();
bool bExists = Favorites.FavoriteExists(sUserID, sURL);
if (bExists)
sMsg = "This link is already in your favorites list";
else
{
Favorites oFavorite = new Favorites();
oFavorite.FavoritesURL = sURL;
oFavorite.FavoritesFriendlyName = sFriendlyName;
oFavorite.UserID = sUserID;
int iRet = Favorites.AddFavrites(oFavorite);
if (-1 == iRet)
sMsg = "Failed to add to favorites list";
else
{
sMsg = "\"" + sFriendlyName + "\" (" + sURL + ") was added to your favorites list";
_Default _Def = new _Default();
_Def.UpdateMaster();
}
}
}
return sMsg;
}