Domanda

Proveniente da un background PHP, adoro usare URL puliti per raccogliere dati da un servizio all'altro.

Tuttavia, su alcuni dei miei progetti ASP.NET ottengo il parametro ViewState orribile nei miei URL.

C'è un modo per disattivarlo a livello globale?

Che effetto avrà questo sulla mia app ASP.NET?

È stato utile?

Soluzione

Puoi disattivare viewstate per l'intero sito in questo modo:

    <system.web>
<pages enableViewState="false" />

Detto questo, non dovresti trovarlo sull'URL. ViewState è un campo nascosto che viene inviato al server con un postback (che normalmente utilizza post). Mantiene lo stato dei controlli quando la pagina è stata renderizzata al client, inviandola con ogni postback. Se funziona per l'applicazione, è possibile passare a utilizzare post (il modulo del problema utilizza sicuramente get), altrimenti non dare un'occhiata alla risposta di Jon.

Controlla questo link per ulteriori informazioni su come il viewstate si adatta al ciclo di vita di asp.net: http://msdn.microsoft.com/en-us/library/ms972976.aspx .

Altri suggerimenti

Ho avuto una domanda simile durante la scrittura il Tracciamento della reputazione .

Non so come lo fai a livello globale se non per non usare mai un modulo con runat="server" set, che ha più a che fare con la disciplina che con un'impostazione. In particolare, se hai <=> impostato su un modulo credo che otterrai sempre un parametro viewstate, anche se lo hai disattivato ovunque in modo da non ottenere valori . Questa è stata la mia esperienza, comunque.

Ovviamente questo ti limita in qualche modo, ma ho scoperto che l'uso dei controlli del server HTML (invece dei controlli ASP.NET) per le parti appropriate di ASP.NET può rendere la vita molto più semplice da capire.

Disattiva ViewState per impostazione predefinita utilizzando un elemento <page> in web.config. L'uso di EnableViewState="true" nella direttiva @Page non funzionerà più dopo aver disabilitato ViewState in web.config. Se in seguito decidi che hai bisogno di ViewState per una pagina specifica, puoi riattivarlo solo per quella pagina usando un elemento <location>.

<configuration>
  <system.web>
    <pages enableViewState="false" />
  </system.web>

  <location path="MyFolder/MyPage.aspx">
    <system.web>
      <pages enableViewState="true" />
    </system.web>
  </location>
  <location path="Site.master">
    <system.web>
      <pages enableViewState="true" />
    </system.web>
  </location>
</configuration>

Devi fare lo stesso per tutte le pagine master utilizzate dalla tua pagina abilitata per ViewState.

Aggiungilo al file web.config:

<Pages enableViewState="false"/> 

È possibile passare ad ASP.Net MVC. Da quanto ho capito, non usa ViewState.

Ricorda, tuttavia, che alcuni comportamenti previsti dalla maggior parte degli sviluppatori di moduli Web ASP.NET non funzioneranno senza ViewState. Lo scopo di ViewState è quello di fornire l'illusione che varie proprietà di pagina e controllo persistano da una richiesta all'altra. ViewState non contiene tutte le proprietà di controllo, ma solo quelle che sono state modificate. L'idea è che ViewState conserva queste proprietà come erano al momento dell'ultimo rendering del modulo.

Un buon esempio è un SelectedIndexChanged evento in un menu a discesa (uno che non ha impostato il postback automatico). Ciò funziona perché ViewState mantiene l'indice precedente e il modulo registra l'indice corrente e il controllo confronta i due per sapere che l'indice selezionato è cambiato. Questo è quando genera l'evento TextChanged. Senza ViewState, quell'evento non si attiva. Lo stesso vale per <=> eventi, ecc.

In assenza della situazione GET (che non ho mai incontrato), il grosso problema con ViewState è usarlo dove non è necessario. Il controllo della griglia non deve conservare i valori precedenti di tutti i controlli in tutte le sue righe, quindi non abilitare ViewState su di esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top