0
好吧,我討厭實施我不太明白的事情,而我正在爲這個失去睡眠。這段代碼爲什麼不重複頁面的主體?
這裏是情況:我正在開發一個ASP.NET網站,前一段時間由其他人開始開發,他們當時正在使用VB.NET。我被要求將我的網頁的VIEWSTATE移動到頁面的底部,因爲這應該能夠提高網頁蜘蛛對我們網頁的搜索能力。
因此,經過幾個小時的搜索,我把這堂課拼湊在一起,到目前爲止效果很好。但它讓我感到困擾,我不明白它爲什麼運作良好,請幫我理解它爲什麼有效。下面是類代碼:
Public Class Page
Inherits System.Web.UI.Page
Protected Overrides Sub Render(writer As System.Web.UI.HtmlTextWriter)
Dim viewStateStart As Integer
Dim viewStateEnd As Integer
Dim viewState As String = ""
Dim FormEnd As Integer
Dim sw As StringWriter = New StringWriter()
Dim hw As HtmlTextWriter = New HtmlTextWriter(sw)
' WHY does this work? Why is this call to the base method not causing
' the HTML body to be duplicated????
MyBase.Render(hw)
Dim bodyHTML As String = sw.ToString()
hw.Close()
sw.Close()
viewStateStart = bodyHTML.IndexOf("<input type=""hidden"" name=""__VIEWSTATE""")
If viewStateStart > -1 Then
viewStateEnd = bodyHTML.IndexOf("/>", viewStateStart) + 2
viewState = bodyHTML.Substring(viewStateStart, viewStateEnd - viewStateStart)
bodyHTML = bodyHTML.Remove(viewStateStart, viewStateEnd - viewStateStart)
FormEnd = bodyHTML.IndexOf("</form>") - 1
bodyHTML = bodyHTML.Insert(FormEnd, viewState)
End If
writer.Write(bodyHTML)
End Sub
End Class
我的問題是,我不明白我的生活,怎麼來的這個類調用基方法Render,並與不使所述ASP頁面的主體兩次逃脫,因爲基本方法也會調用Writer.Write(htmlWriter)
爲什麼不是這種情況?
感謝您的任何幫助和意見人。
我想我現在可以睡了:)非常感謝Andrei。當我達到聲望15我將能夠upvote :) – 2014-12-05 15:21:05
@AjaxNgnurse,它的價值,你可以標記答案爲接受。主要是爲了表明它對你有幫助,以防其他人有類似的問題並找到這個線程 – Andrei 2014-12-05 18:11:34