我在usercontrol
中遇到了一些問題。我已經待了好幾個小時,所以現在不得不尋求幫助。將值綁定到usercontrol的問題
如果我把從加價頁面類似這樣的用戶控件:
<uc7:MenuMain2 ID="MenuMain2" runat="server" RootCategoryId="4" ImageHeight="40"
ImageWidth="260" />
它工作正常。
我也可以把它叫做:
Control cont = LoadControl(@"../usercontrols/MenuMain2.ascx");
ContentPlaceHolder1.Controls.Add(cont);
而且也能正常工作。但是,我不能設置像我需要的屬性。
但是,如果我將它稱爲像下面的代碼中的代碼佔位符,它不起作用。我收到了我在頁面底部發布的錯誤。
Usercontrol
代碼文件 - MenuMain.ascx.cs
:
public partial class MenuMain2 : System.Web.UI.UserControl {
public int ActiveCategoryId { get; set; }
public int RootCategoryId { get; set; }
public int articleID = 0;
public int ImageWidth ;
public int ImageHeight ;
protected void Page_Load(object sender, EventArgs e) {
if (!Page.IsPostBack)
BindData();
}
private void BindData() {
CategoriesService catSvc = new CategoriesService();
if (ActiveCategoryId == 0) {
if (articleID > 0) {
M02ArticlesService artSvc = new M02ArticlesService();
List<M02ArticlesEntity> artList = artSvc.FindById(articleID);
if (artList.Count > 0)
ActiveCategoryId = artList.First().CategoryId;
}
}
List<CategoriesEntity> catList = new List<CategoriesEntity>();
catList = catSvc.GetPublishedByParentCategoryId(RootCategoryId);
ViewState.Add("ActiveCategoryId", ActiveCategoryId);
Repeater1.DataSource = catList;
Repeater1.DataBind();
}
}
代碼隱藏用於Masterpage
:
public HttpCookie authCookie;
public FormsAuthenticationTicket ticket;
private string name;
private MenuMain2 mn;
protected void Page_Load(object sender, EventArgs e)
{
mn = new MenuMain2 {RootCategoryId = 4,ImageHeight = 100, ImageWidth = 260}
//Control cont = LoadControl(@"../usercontrols/MenuMain2.ascx");
if (Request.Cookies[".ASPXAUTH"] != null)
{
authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
ticket = FormsAuthentication.Decrypt(authCookie.Value);
name = ticket.Name;
}
if (name != null)
{
if (name.Equals("Jhon"))
{
mn.RootCategoryId = 1;
}
if (name.Equals("Bob"))
{
mn.RootCategoryId = 2;
}
if (name.Equals("Tom"))
{
mn.RootCategoryId = 3;
}
}
ContentPlaceHolder1.Controls.Add(mn);
CategoriesEntity cat;
int catId = Request.GetCategoryId();
if (catId > 0)
{
cat = new CategoriesService().GetById(catId);
if (cat != null && cat.RequireLogin && Request.Url.LocalPath != "/login.aspx")
{
if (!view_M06PersonsCategoriesService.HasAccess(HttpContext.Current.User.Identity.Name, catId))
{
Response.Redirect(string.Format("~/login.aspx?ReturnUrl={0}&qs={1}&CatId={2}{3}",
Server.UrlEncode(Request.Url.LocalPath),
Server.UrlEncode(Request.Url.Query),
Request.QueryString["CatId"],
Request.QueryString["ArtId"].IsEmpty() ? String.Empty : "&ArtId=" + Request.QueryString["ArtId"]));
}
}
}
if (!Page.IsPostBack)
{
litAdmin.Text = ConfigurationManager.AppSettings["WebName"].ToString();
string url = Request.ServerVariables["URL"].ToString();
if (url.ToLower().StartsWith("/default.aspx"))
GetPhotoalbum();
}
}
}
}
錯誤消息 - 在應用中的線42是這樣的一個 - Repeater1.DataSource = catList;
-
`Object reference not set to an instance of an object.`
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]
No.Itl.Web.WebApplication.usercontrols.MenuMain2.BindData() in e:\WorkFolder\usercontrols\MenuMain2.ascx.cs:42
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +24
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +41
System.Web.UI.Control.OnLoad(EventArgs e) +131
System.Web.UI.Control.LoadRecursive() +65
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2427
你能找到我們這行'MenuMain2.ascx.cs:42'嗎? – Aristos
是的,它的Repeater1.DataSource = catList; – Darkmage
所以,'GetPublishedByParentCategoryId'返回null ...?或DataBind發生錯誤,請在控件的呈現內找到空點。 – Aristos