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
}