【问题标题】:ASP.net c# page_load firing twice?ASP.net c# page_load 触发两次?
【发布时间】:2010-08-09 14:19:33
【问题描述】:
protected void Page_Load(object sender, EventArgs e)
{
    string menuIDdata = Page.Request.QueryString["mid"];
    menuID = 0;

    // Check the user is allowed here
    if (!Roles.IsUserInRole("Admin"))
    {
        Response.Redirect("../default.aspx");
    }

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

    debugLabel.Text = "WORKING";

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

在页面上:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="admin.aspx.cs" Inherits="*******._Default" title="Administration" %>

<!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" class="navButton">
            <a href="admin.aspx" class="navLink">Admin Home</a>
        </asp:Panel>

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

        <asp:Panel id="mnu2" runat="server" class="navButton">
            <a href="admin.aspx" class="navLink">Products</a>
        </asp:Panel>              
    </div>                        
    <br /><br />
    <div class="subMenu">
        <a href="products.aspx" class="subLink">Products</a> <a href="productCats.aspx" class="subLink">Categories</a> 
    </div>
    <br /><br />
    Welcome to the Admin
    <br /><br />        
    <asp:label id="debugLabel" runat="server" />

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

调试标签拒绝更改它的值,我希望它显示“正在工作”,因为它是文本,我做错了什么?

更新:

尝试构建时出现 3 个错误:

错误 1 ​​类型 '******._Default' 已经定义了一个名为 'Page_Load' 的成员,具有相同的参数 types\Default.aspx.cs 12 24

x3 但在不同的页面上

【问题讨论】:

  • 想必你调试的时候可以看到label text assignment line被打了?
  • 我会说 debugLabel.Text = "WORKING" 这一行永远不会被击中。
  • 呸,我正在从远程服务器打开 Visual Studio 中的文件,调试不允许我拥有权限或其他东西
  • 在浏览器上查看 html 源代码。标签呈现为跨度标签。
  • 是否在页面类级别声明了 menuID?如果您不是管理员用户,它会重定向吗?

标签: c# asp.net


【解决方案1】:

编辑:

好的,给你。您有一个 Default.aspx 页面,Admin-Page 最有可能从中复制。

public partial class _Default : System.Web.UI.Page 

因此,如果您需要此 Default-Page 中的一些基本功能,则需要从此 Page 继承。然后改成这样:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="admin.aspx.cs" Inherits="_Default" title="Administration" %>

如果不是这样......(假设页面的类被称为它的文件......)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="admin.aspx.cs" Inherits="Admin" title="Administration" %>

更改您的代码...

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

由于TryParse 正在返回解析后的整数和输出参数。

【讨论】:

  • 感谢您的回答,但标签仍然没有显示任何内容
  • 即使在不成功的情况下menuID 也会为0。因此,如果OP 在这种情况下不执行任何其他操作,则根本不需要if
  • 删除角色行没有任何作用,它仍然没有显示标签。标签呈现为空 ,但我确实有 3 个错误(请参阅问题的编辑),这会阻止它运行吗?
【解决方案2】:

在代码上放一个调试器,你会看到代码永远不会到达“ debugLabel.Text = “WORKING”; " 代码行,因为它之前发生了一些异常。您将文本分配给标签的方式绝对没有问题

【讨论】:

    【解决方案3】:
    try
    {
    string menuIDdata = Page.Request.QueryString["mid"];
    menuID = 0;
    
    // Check the user is allowed here
    if (!Roles.IsUserInRole("Admin")) Then
    {
        Response.Redirect("../default.aspx");
    }
    
    // Get the menu ID
    if (int.TryParse(menuIDdata, out menuID))
    {
        menuID = int.Parse(menuIDdata);
    }
    else
    {
        menuID = 0;
    }
    }
    catch { }
    debugLabel.Text = "WORKING";
    
    var selectedMenu = this.Page.FindControl("mnu" + menuID) as Panel;
    selectedMenu.CssClass = "navButtonO";
    

    【讨论】:

      【解决方案4】:

      这一行:

      <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="admin.aspx.cs" Inherits="*******._Default" title="Administration" %>
      

      让我很困惑。您是否有一个名为 admin.aspx.cs 的文件和一个名为 *******._Default 的公共类?这是一个非常不寻常的约定。也许您的代码隐藏引用或此页面继承自的类名不正确。

      【讨论】:

      • 这是我创建页面时自动生成的,但我可能会复制并粘贴另一个页面来制作该页面
      • 尝试将 admin.aspx.cs 文件中的公共部分类重命名为独特的名称。然后将 Inherits-"" 参数更新为新的类名。我敢打赌,至少这个页面会从编译错误列表中消失。它可能会也可能不会解决您的双重回发问题。
      • 并在代码后面:公共部分类 Admin_Default_UNIQUE : System.Web.UI.Page {
      • 感谢您的帮助,我收到错误消息:解析器错误消息:无法加载类型“Admin_Default_UNIQUE”。
      • 您是否也重命名了 admin.aspx.cs 文件中的类名?公共部分类 Admin_Default_UNIQUE : System.Web.UI.Page {
      猜你喜欢
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多