gpt4 book ai didi

c# - 将值绑定(bind)到用户控件时出现问题

转载 作者:行者123 更新时间:2023-11-30 17:56:16 25 4
gpt4 key购买 nike

我在使用 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 mn = (MenuMain2)LoadControl(@"../usercontrols/MenuMain2.ascx");

....

if (name != null)
{
if (name.Equals("Jhon"))
{
mn.RootCategoryId = 1;
}
if (name.Equals("Bob"))
{
mn.RootCategoryId = 2;
}
if (name.Equals("Tom"))
{
mn.RootCategoryId = 3;
}
}

您正在将 UserControl 加载到 cont 中,但在 mn 中定义了一种 MainMenu2 并添加了尚未加载的对象。

关于c# - 将值绑定(bind)到用户控件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14369513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com