Pagine asp.net : Spostare view state alla fine della pagina

Il codice generato da IIS in fase di rendering del codice di una pagina posiziona i tag



all inizio della pagina e questo potrebbe essere dannoso (non direttamente dimostrabile però) ai fini del posizionamento.

Per ovviare a questo inconveniente, seguite i seguenti due passi:

1° PASSO
Create un file classe nella cartella App_code e attribuitele il nome PageBase.cs. Aggiungete il seguente codice all”interno della classe:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Web.UI;
 
namespace WebPageBase
{
  public class PageBase : System.Web.UI.Page
  {
    /// Quesot metodo overrides il metodo Render() per la pagina e sposta il ViewState
    /// dalla sua posizione all'inizio del file renderizzato  alla fine della stessa pagina
    /// 
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
      // Ricava l'HTML rendereizzato.
      StringWriter stringWriter = new StringWriter();
      HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);
      base.Render(htmlTextWriter);
      string html = stringWriter.ToString();
 
      // Chiude i due writers.
      htmlTextWriter.Close();
      stringWriter.Close();
 
      // Cerca il viewstate. 
      int start = html.IndexOf(@"<input type=""hidden"" name=""__VIEWSTATE""");
      
      // Se trova il viewstate lo sposta.
      if (start > -1)
      {
        int end = html.IndexOf("/>", start) + 2;
 
        string strviewstate = html.Substring(start, end - start);
        html = html.Remove(start, end - start);
 
        // Trova la fine del modulo ed inserisce il viewstate qui.
        int formend = html.IndexOf(@"</form>") - 1;
        html = html.Insert(formend, strviewstate);
      }
 
      // Restituisce il codice.
      writer.Write(html);
    }
  }
}

2° PASSO
Nelle pagine (code-behind) ereditate da WebPageBase.PageBase
public partial class Page : WebPageBase.PageBase
{
    // Codice
}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Non sono una macchina... *