asp:repeater 可以使用空列表作为数据源吗?

发布于 2024-12-08 06:14:57 字数 4143 浏览 3 评论 0原文

我有这个标记:

    <asp:Repeater ID="appsRepeater" runat="server">
        <ItemTemplate>
            <li>
                <div class="clearfix">
                    <a href="---some code I emitted--">
                        <img width="20" height="20" src="<%#DataItem.ThumbnailUrl%>" alt="" />
                        <span title="<%#Server.HtmlEncode(DataItem.Name)%>"><%#MarketplaceUIAdapter.EncodeTrimText(DataItem.Name,15)%></span>
                    </a>
                    <div class="app_links">
                        <a href="---some code I emitted--" class="text_link">
                            Edit</a>
                        <asp:LinkButton runat="server" CssClass="text_link" OnClick="DeleteApp" OnClientClick='<%# string.Format("return confirmDelete(\"{0}\",\"{1}\")",DataItem.Name.Replace("\"","&qout;"), DataItem.AppType)%>' CommandArgument="<%#DataItem.Id.ToString()%>" analyticstrackingpath="/virtual/apps/myappslist/Delete">Delete</asp:LinkButton>
                    </div>
                </div>
            </li>
        </ItemTemplate>
    </asp:Repeater>

和后面的代码:

    private void BindData()
    {

        apps = Person.Apps.ToArray();
        Array.Sort(apps, (a2, a1) => a1.CreatedDate.CompareTo(a2.CreatedDate));
        if (apps.Count() > 0)
        {
            appsRepeater.DataSource = apps;
            appsRepeater.DataBind();
        }          
    }

我有时看到 Person 为空,所以我想做一个安全检查:

            if (Person!= null)
            {
                // same as above   

            }

        else
        {
            appsRepeater.DataSource = new List<IApp>();
            appsRepeater.DataBind();
        }

但我的标记抛出渲染错误。 数据源可以不赋值但不能为空列表? 或者是别的什么?

错误: “/”应用程序中的服务器错误。

你调用的对象是空的。

描述:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。

异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

源错误:

Line 55:                        %>
Line 56:                     <Toolbar:Selector ID="Selector1" runat="server"></Toolbar:Selector>
Line 57:                        <%}
Line 58: %>
Line 59:                     

Source File: d:\MyName\RnD\Server\Services\ControlPanel\Dev-SSO-1.0-RewardsWithWibiya\ControlPanel\Masters\ControlPanelMaster.Master    Line: 57 

堆栈跟踪:

[NullReferenceException: Object reference not set to an instance of an object.]
   **ASP.browserapps_controls_myapps_ascx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) +52**
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +114
   ASP.browserapps_controls_createapp_ascx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in D:\MyName\RnD\Serve:172
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +114
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +239
   ASP.masters_controlpanelmaster_master.__RenderfrmMain(HtmlTextWriter __w, Control parameterContainer) in d:\MyName\RnD\Server\Services\ControlPanel\Dev-SSO-1.0-RewardsWithWibiya\ControlPanel\Masters\ControlPanelMaster.Master:57
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +114
   System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer) +252
   System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output) +86
   System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer) +52
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +239
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +239
   System.Web.UI.Page.Render(HtmlTextWriter writer) +37
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4239

I have this markup:

    <asp:Repeater ID="appsRepeater" runat="server">
        <ItemTemplate>
            <li>
                <div class="clearfix">
                    <a href="---some code I emitted--">
                        <img width="20" height="20" src="<%#DataItem.ThumbnailUrl%>" alt="" />
                        <span title="<%#Server.HtmlEncode(DataItem.Name)%>"><%#MarketplaceUIAdapter.EncodeTrimText(DataItem.Name,15)%></span>
                    </a>
                    <div class="app_links">
                        <a href="---some code I emitted--" class="text_link">
                            Edit</a>
                        <asp:LinkButton runat="server" CssClass="text_link" OnClick="DeleteApp" OnClientClick='<%# string.Format("return confirmDelete(\"{0}\",\"{1}\")",DataItem.Name.Replace("\"","&qout;"), DataItem.AppType)%>' CommandArgument="<%#DataItem.Id.ToString()%>" analyticstrackingpath="/virtual/apps/myappslist/Delete">Delete</asp:LinkButton>
                    </div>
                </div>
            </li>
        </ItemTemplate>
    </asp:Repeater>

and code behind:

    private void BindData()
    {

        apps = Person.Apps.ToArray();
        Array.Sort(apps, (a2, a1) => a1.CreatedDate.CompareTo(a2.CreatedDate));
        if (apps.Count() > 0)
        {
            appsRepeater.DataSource = apps;
            appsRepeater.DataBind();
        }          
    }

I saw sometime Person is null so I wanted to do a safety check:

            if (Person!= null)
            {
                // same as above   

            }

        else
        {
            appsRepeater.DataSource = new List<IApp>();
            appsRepeater.DataBind();
        }

But my markup throws Rendering Error.
The data source can be not assigned but cannot be empty list ?
Or is it something else ?

the error:
Server Error in '/' Application.

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:

Line 55:                        %>
Line 56:                     <Toolbar:Selector ID="Selector1" runat="server"></Toolbar:Selector>
Line 57:                        <%}
Line 58: %>
Line 59:                     

Source File: d:\MyName\RnD\Server\Services\ControlPanel\Dev-SSO-1.0-RewardsWithWibiya\ControlPanel\Masters\ControlPanelMaster.Master    Line: 57 

Stack Trace:

[NullReferenceException: Object reference not set to an instance of an object.]
   **ASP.browserapps_controls_myapps_ascx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) +52**
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +114
   ASP.browserapps_controls_createapp_ascx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in D:\MyName\RnD\Serve:172
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +114
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +239
   ASP.masters_controlpanelmaster_master.__RenderfrmMain(HtmlTextWriter __w, Control parameterContainer) in d:\MyName\RnD\Server\Services\ControlPanel\Dev-SSO-1.0-RewardsWithWibiya\ControlPanel\Masters\ControlPanelMaster.Master:57
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +114
   System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer) +252
   System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output) +86
   System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer) +52
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +239
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +239
   System.Web.UI.Page.Render(HtmlTextWriter writer) +37
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4239

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

如若梦似彩虹 2024-12-15 06:14:57

问题是我发送了一个 new List() 而不是新的 IApp[0]

The problem was I sent a new List<IApp>() instead of new IApp[0].

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文