簡體   English   中英

ASP.net C#崩潰一行

[英]ASP.net c# crash on one line

我有一個母版頁,在on load事件中包含以下幾行:

    string menuIDdata = Page.Request.QueryString["mid"];
    menuID = 0;

    // Get the menu ID
    if (!int.TryParse(menuIDdata, out menuID))
    {
        menuID = 0;
    }

    // Select the correct menu
    var selectedMenu = this.Page.FindControl("mnu" + menuID) as Panel;
    selectedMenu.CssClass = "navButtonO";

var設置很好,但是CSS類行因錯誤而崩潰:

異常詳細信息:System.NullReferenceException:對象引用未設置為對象的實例。

母版頁上包含以下元素:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="AdminMaster.master.cs" Inherits="MySite.MasterPages.AdminMaster" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 
    1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="mainHead" runat="server" >
        <title>Administration</title>
        <link rel="Stylesheet" href="../style/admin.css" />       
    </head>
    <body>

    <form id="mainForm" runat="server">

    <div class="topMenu">    

        <asp:Panel id="mnu0" runat="server" CssClass="navButton">
            <a href="admin.aspx?mid=0" class="navLink">Admin Home</a>
        </asp:Panel>

        <asp:Panel id="mnu1" runat="server" CssClass="navButton">
            <a href="admin.aspx?mid=1" class="navLink">User Manager</a>
        </asp:Panel>

        <asp:Panel id="mnu2" runat="server" CssClass="navButton">
            <a href="admin.aspx?mid=2" class="navLink">Products</a>
        </asp:Panel>  

        <asp:Panel id="mnu3" runat="server" CssClass="navButtonR">
            <a href="../default.aspx" class="navLink">Back to Site</a>
        </asp:Panel>
    </div>

    <br /><br />
    <asp:Panel id="subLinks" runat="server" CssClass="subMenu"></asp:Panel>

    <div class="mainContent">
        <asp:contentplaceholder id="mainContent" runat="server" />
    </div>



    </form>
    </body>
</html>

有任何想法嗎? 謝謝! 我是.net的新手,當此代碼位於其自己的頁面上時,該代碼可以正常工作,將其移至母版頁,並且將崩潰范圍縮小到了設置CSS類的那一行。

編輯

注釋掉這一行:

selectedMenu.CssClass = "navButtonO";

整個過程運行良好,因此看來這條線是失敗的。

var selectedMenu = this.Page.FindControl("mnu" + menuID) as Panel;

上一行未能在頁面上找到與您傳遞的ID匹配的控件,或者無法將找到的控件強制轉換為面板。

在該行上設置一個斷點,並確保頁面上的控件與您認為應該存在的ID相匹配。

我認為您缺少查詢字符串中沒有任何內容的條件。 您應該先檢查一下:

string menuIDdata = Page.Request.QueryString["mid"];
if (String.IsNullOrEmpty(menuIDdata))
    return;

檢查它是否為null或為空,並且不呈現您的子菜單。

編輯:

好吧,我看到您設置為0,當queryString為空時,maby您正在以錯誤的方式搜索母版,請查看此: http : //www.west-wind.com/Weblog/posts/5127.aspx並嘗試此方法:

/// <summary>
/// Finds a Control recursively. Note finds the first match and exists
/// </summary>
/// <param name="ContainerCtl"></param>
/// <param name="IdToFind"></param>
/// <returns></returns>
public static Control FindControlRecursive(Control Root, string Id)
{
    if (Root.ID == Id)
        return Root;

    foreach (Control Ctl in Root.Controls)
    {
        Control FoundCtl = FindControlRecursive(Ctl, Id);
        if (FoundCtl != null)
            return FoundCtl;
    }

    return null;
}

用法:

var selectedMenu = FindControlRecursive(this.Master, "mnu" + menuID) as Panel; 

您的Panel控件很可能嵌套在頁面Form控件中,而Form控件是Page控件的子級。
為了使它起作用,您可以創建某種遞歸方法來定位要使用的控件,然后才嘗試嘗試為它分配任何屬性值,以查看是否已找到該控件。

您在錯誤的位置搜索面板。 母版頁不屬於頁面。 如果你改變

var selectedMenu = this.Page.FindControl("mnu" + menuID) as Panel;

var selectedMenu = this.Master.FindControl("mnu" + menuID) as Panel;

您可能會有更多的運氣。

PS我不記得將master屬性添加到Page類的時間。 您沒有說您正在運行什么版本。 因此,此代碼可能不適用,但是這個概念很合理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM