Úvod do ladění webů ASP.NET webových stránek (Razor)

, autor: Tom FitzMacken

Tento článek vysvětluje různé způsoby ladění stránek na webu ASP.NET Web Pages (Razor). Ladění je proces hledání a opravy chyb na kódových stránkách.

Co se naučíte:

  • Jak zobrazit informace, které pomáhají analyzovat a ladit stránky.
  • Jak používat ladicí nástroje v sadě Visual Studio.

Toto jsou ASP.NET funkce uvedené v článku:

  • Pomocník ServerInfo .
  • ObjectInfo Pomocníka.

Verze softwaru

  • ASP.NET Webové stránky (Razor) 3
  • Visual Studio 2013

Tento kurz funguje také s webovými stránkami ASP.NET 2. Můžete použít WebMatrix 3, ale integrovaný ladicí program není podporován.

Důležitým aspektem řešení chyb a problémů v kódu je, abyste se jim v první řadě vyhnuli. Můžete to udělat tak, že do bloků vložíte části kódu, které pravděpodobně způsobí chyby try/catch . Další informace najdete v části věnované zpracování chyb v tématu Úvod do ASP.NET webového programování pomocí syntaxe Razor.

Pomocná rutina ServerInfo je diagnostický nástroj, který poskytuje přehled informací o prostředí webového serveru, které hostuje vaši stránku. Zobrazuje také informace o požadavcích HTTP, které se odesílají, když prohlížeč požádá o stránku. Pomocník ServerInfo zobrazí aktuální identitu uživatele, typ prohlížeče, který žádost vytvořil, a tak dále. Tento druh informací vám může pomoct při řešení běžných problémů.

  1. Vytvořte novou webovou stránku s názvem ServerInfo.cshtml.

  2. Na konec stránky, těsně před uzavírací </body> značku, přidejte @ServerInfo.GetHtml():

    <!DOCTYPE html>
    <html>
        <head>
            <title></title>
        </head>
        <body>
       @ServerInfo.GetHtml()
        </body>
    </html>
    

    Kód můžete přidat ServerInfo kamkoli na stránku. Když ho ale přidáte na konec, jeho výstup zůstane oddělený od ostatního obsahu stránky, což usnadňuje čtení.

    Poznámka

    Důležité Před přesunutím webových stránek na produkční server byste měli z webových stránek odebrat veškerý diagnostický kód. To platí jak pro ServerInfo pomocníka, tak pro ostatní diagnostické techniky v tomto článku, které zahrnují přidání kódu na stránku. Nechcete, aby návštěvníci vašeho webu viděli informace o názvu vašeho serveru, uživatelských jménech, cestách na serveru a podobných podrobnostech, protože tento typ informací může být užitečný pro uživatele se zlými úmysly.

  3. Uložte stránku a spusťte ji v prohlížeči.

    Ladění-1

    Pomocník ServerInfo zobrazí na stránce čtyři tabulky informací:

    • Konfigurace serveru. Tato část obsahuje informace o hostitelském webovém serveru, včetně názvu počítače, verze ASP.NET, kterou používáte, názvu domény a času serveru.

    • proměnné ASP.NET serveru. Tato část obsahuje podrobnosti o mnoha podrobnostech protokolu HTTP (označovaných jako proměnné HTTP) a hodnotách, které jsou součástí každého požadavku webové stránky.

    • Informace o modulu runtime HTTP. Tato část obsahuje podrobnosti o verzi rozhraní Microsoft .NET Framework, ve které běží vaše webová stránka, cestě, podrobnostech o mezipaměti atd. (Jak jste se dozvěděli v úvodu do ASP.NET webového programování pomocí syntaxe Razor, ASP.NET webové stránky používající syntaxi Razor jsou postaveny na technologii webového serveru ASP.NET společnosti Microsoft, která je sama postavena na rozsáhlé knihovně pro vývoj softwaru označované jako .NET Framework.)

    • Proměnné prostředí. Tato část obsahuje seznam všech místních proměnných prostředí a jejich hodnot na webovém serveru.

      Úplný popis všech informací o serveru a žádostech je nad rámec tohoto článku, ale vidíte, že ServerInfo pomocník vrací spoustu diagnostických informací. Další informace o vrácených hodnotách ServerInfo najdete v tématech Rozpoznané proměnné prostředí na webu Microsoft TechNet a Proměnné serveru služby IIS na webu MSDN.

Vložení výstupních výrazů pro zobrazení hodnot stránky

Dalším způsobem, jak zjistit, co se děje v kódu, je vložit na stránku výstupní výrazy. Jak víte, můžete přímo vytvořit výstup hodnoty proměnné tak, že na stránku přidáte něco jako @myVariable nebo @(subTotal * 12) . Pro účely ladění můžete tyto výstupní výrazy umístit do strategických bodů v kódu. Díky tomu můžete při spuštění stránky zobrazit hodnotu klíčových proměnných nebo výsledek výpočtů. Až ladění dokončíte, můžete výrazy odebrat nebo je zakomentovat. Tento postup znázorňuje typický způsob použití vložených výrazů k ladění stránky.

  1. Vytvořte novou stránku WebMatrix s názvem OutputExpression.cshtml.

  2. Obsah stránky nahraďte následujícím kódem:

    <!DOCTYPE html>
    <html>
        <head>
            <title></title>
        </head>
        <body>   
    
        @{
            var weekday = DateTime.Now.DayOfWeek;
            // As a test, add 1 day to the current weekday.
            if(weekday.ToString() != "Saturday") {
                // If weekday is not Saturday, simply add one day.
                weekday = weekday + 1; 
            }
            else {
                // If weekday is Saturday, reset the day to 0, or Sunday.
                weekday = 0; 
            }
            // Convert weekday to a string value for the switch statement.
            var weekdayText = weekday.ToString(); 
    
            var greeting = "";
            
            switch(weekdayText) 
            { 
                case "Monday":
                    greeting = "Ok, it's a marvelous Monday."; 
                    break; 
                case "Tuesday":
                    greeting = "It's a tremendous Tuesday.";
                    break; 
                case "Wednesday":
                    greeting = "Wild Wednesday is here!";
                    break; 
                case "Thursday":
                    greeting = "All right, it's thrifty Thursday.";
                    break;
                case "Friday":
                    greeting = "It's finally Friday!";
                    break;
                case "Saturday":
                    greeting = "Another slow Saturday is here.";
                    break;
                case "Sunday":
                    greeting = "The best day of all: serene Sunday.";
                    break;
                default:
                    break; 
            }
        }
        
        <h2>@greeting</h2>
    
        </body>
    </html>
    

    Příklad používá switch příkaz ke kontrole hodnoty weekday proměnné a zobrazení jiné výstupní zprávy v závislosti na tom, který den v týdnu je. V tomto příkladu if blok v prvním bloku kódu libovolně mění den v týdnu přidáním jednoho dne k aktuální hodnotě v týdnu. Jedná se o chybu zavedenou pro ilustraci.

  3. Uložte stránku a spusťte ji v prohlížeči.

    Na stránce se zobrazí zpráva pro nesprávný den v týdnu. Bez ohledu na den v týdnu se zpráva zobrazí o jeden den později. I když v tomto případě víte, proč je zpráva vypnutá (protože kód záměrně nastavuje nesprávnou hodnotu dne), ve skutečnosti je často obtížné zjistit, kde se v kódu něco děje. Pokud chcete ladit, musíte zjistit, co se děje s hodnotou klíčových objektů a proměnných, jako weekdayje .

  4. Přidejte výstupní výrazy vložením, @weekday jak je znázorněno na dvou místech označených komentáři v kódu. Tyto výstupní výrazy zobrazí hodnoty proměnné v tomto bodě při provádění kódu.

    var weekday = DateTime.Now.DayOfWeek;
    // DEBUG: Display the initial value of weekday. 
    @weekday
    
    // As a test, add 1 day to the current weekday.
    if(weekday.ToString() != "Saturday") {
        // If weekday is not Saturday, simply add one day.
        weekday = weekday + 1; 
    }
    else {
        // If weekday is Saturday, reset the day to 0, or Sunday.
        weekday = 0; 
    }
    
    // DEBUG: Display the updated test value of weekday.
    @weekday
    
    // Convert weekday to a string value for the switch statement.
    var weekdayText = weekday.ToString();
    
  5. Uložte a spusťte stránku v prohlížeči.

    Stránka nejprve zobrazí skutečný den v týdnu, pak aktualizovaný den v týdnu, který je výsledkem přidání jednoho dne, a pak výslednou zprávu z switch příkazu. Výstup ze dvou proměnných výrazů (@weekday) nemá mezi dny žádné mezery, protože jste do výstupu nepřidali žádné značky HTML <p> . Výrazy jsou jen pro testování.

    Ladění-2

    Teď můžete zjistit, kde se chyba nachází. Při prvním zobrazení weekday proměnné v kódu se zobrazí správný den. Když ho zobrazíte podruhé, po if bloku v kódu je den vypnutý o jeden den. Takže víte, že se něco stalo mezi prvním a druhým výskytem proměnné v týdnu. Pokud by se jednalo o skutečnou chybu, tento typ přístupu by vám pomohl zúžit umístění kódu, který problém způsobuje.

  6. Opravte kód na stránce odebráním dvou výstupních výrazů, které jste přidali, a odebráním kódu, který mění den v týdnu. Zbývající úplný blok kódu vypadá jako v následujícím příkladu:

    @{
        var weekday = DateTime.Now.DayOfWeek;
        var weekdayText = weekday.ToString(); 
    
        var greeting = "";
            
        switch(weekdayText) 
        { 
            case "Monday":
                greeting = "Ok, it's a marvelous Monday."; 
                break; 
            case "Tuesday":
                greeting = "It's a tremendous Tuesday.";
                break; 
            case "Wednesday":
                greeting = "Wild Wednesday is here!";
                break; 
            case "Thursday":
                greeting = "All right, it's thrifty Thursday.";
                break;
            case "Friday":
                greeting = "It's finally Friday!";
                break;
            case "Saturday":
                greeting = "Another slow Saturday is here.";
                break;
            case "Sunday":
                greeting = "The best day of all: serene Sunday.";
                break;
            default:
                break; 
        }
    }
    
  7. Spusťte stránku v prohlížeči. Tentokrát se zobrazí správná zpráva pro skutečný den v týdnu.

Použití pomocné rutiny ObjectInfo k zobrazení hodnot objektů

Pomocník ObjectInfo zobrazí typ a hodnotu každého objektu, který mu předáte. Můžete ho použít k zobrazení hodnoty proměnných a objektů v kódu (stejně jako u výstupních výrazů v předchozím příkladu) a navíc můžete zobrazit informace o datovém typu objektu.

  1. Otevřete soubor s názvem OutputExpression.cshtml , který jste vytvořili dříve.

  2. Nahraďte veškerý kód na stránce následujícím blokem kódu:

    <!DOCTYPE html>
    <html>
        <head>
            <title></title>
        </head>
        <body>
        @{
          var weekday = DateTime.Now.DayOfWeek;
          @ObjectInfo.Print(weekday)
          var weekdayText = weekday.ToString(); 
      
          var greeting = "";
      
          switch(weekdayText) 
          { 
              case "Monday":
                  greeting = "Ok, it's a marvelous Monday."; 
                  break; 
              case "Tuesday":
                  greeting = "It's a tremendous Tuesday.";
                  break; 
              case "Wednesday":
                  greeting = "Wild Wednesday is here!";
                  break; 
              case "Thursday":
                  greeting = "All right, it's thrifty Thursday.";
                  break;
              case "Friday":
                  greeting = "It's finally Friday!";
                  break;
               case "Saturday":
                  greeting = "Another slow Saturday is here.";
                  break;
               case "Sunday":
                  greeting = "The best day of all: serene Sunday.";
                  break;
              default:
                  break; 
          }
        }
        @ObjectInfo.Print(greeting)
        <h2>@greeting</h2>
    
        </body>
    </html>
    
  3. Uložte a spusťte stránku v prohlížeči.

    Ladění-4

    V tomto příkladu zobrazí pomocná rutina ObjectInfo dvě položky:

    • Typ Pro první proměnnou je DayOfWeektyp . Pro druhou proměnnou je Stringtyp .

    • Hodnota Protože v tomto případě už na stránce zobrazujete hodnotu proměnné pozdravu, zobrazí se hodnota znovu, když proměnnou předáte do ObjectInfo.

      U složitějších ObjectInfo objektů může pomocník zobrazit více informací – v podstatě může zobrazit typy a hodnoty všech vlastností objektu.

Použití nástrojů pro ladění v sadě Visual Studio

Pokud chcete získat komplexnější prostředí ladění, použijte visual studio. V sadě Visual Studio můžete nastavit zarážku v kódu na řádku, který chcete zkontrolovat.

nastavit zarážku

Při otestování webu se spuštěný kód zastaví na zarážce.

dosažení zarážky

Můžete prozkoumat aktuální hodnoty proměnných a procházet kód řádek po řádku.

zobrazit hodnoty

Informace o použití integrovaného ladicího programu v sadě Visual Studio k ladění ASP.NET stránek Razor najdete v tématu Programování webových stránek ASP.NET (Razor) pomocí sady Visual Studio.

Další materiály