2012-03-27 3 views
0

내 응용 프로그램이 작동하지 않는 원인이되는 막대한 viewstate 숨김 필드가 있습니다. 나는 시도했다 : 페이지 지시문의 모든 제어 viewstate 숨겨진 필드를 제거 할 수 없습니다.

  • EnableViewState="false"

    • EnableViewState="false"
    • Page.EnableViewState = false<pages enableViewState="false" /> in web.config

    Page_Init

  • 문제를 일으키는 페이지에서 내가 원하는 하나의 GridView이있다 한 번만 렌더링되므로 viewstate가 필요하지 않습니다.

    this tool을 사용하여 숨겨진 필드를 검사했으며 분명히 모든 컨트롤의 속성을 비활성화 했으므로 정보가 거의 없습니다. 웬일인지, 페이지는 수천의 선과 수천의 선인 숨겨진 들판을 포함하는 것을 주장한다.

    이 필드를 제거하거나 사용 가능한 크기로 줄일 수있는 방법은 무엇입니까?

    <asp:GridView ID="MyGrid" runat="server" AutoGenerateColumns="False" 
         EnableModelValidation="True" EnableViewState="False" 
         CssClass="my-report"> 
         <Columns> 
          <asp:TemplateField> 
           <HeaderTemplate> 
           <span title='title' class="abbr">My ID</span> 
           </HeaderTemplate> 
           <ItemTemplate> 
           <%# Eval("my_id") %> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField> 
           <HeaderTemplate> 
           <span title='title2' class="abbr">Second col heading</span> 
           </HeaderTemplate> 
           <ItemTemplate> 
            <asp:ListView ID="MyListView" runat="server" EnableViewState="False"> 
            <LayoutTemplate> 
             <ul> 
              <asp:PlaceHolder runat="server" ID="itemPlaceHolder" EnableViewState="False" /> 
             </ul> 
            </LayoutTemplate> 
            <ItemTemplate> 
              <li><%# Eval("field_2")%></li> 
            </ItemTemplate> 
            </asp:ListView> 
           </ItemTemplate> 
          </asp:TemplateField> 
         </Columns> 
        </asp:GridView> 
    
  • +0

    페이지의 렌더링 이벤트에서 제거하려고 했습니까? http://stackoverflow.com/questions/2432972/completely-remove-viewstate-for-specific-pages – KodeKreachor

    +0

    @KodeKreachor 나는 그것 (아직)에 의지하지 않았다, 그것은 거대한 kludge와 같게 보인다. 그 저자는 _ "이 작업의 오버 헤드는 거의 확실하게 어떤 이점보다 큽니다."_ 나는 동의해야합니다. ( – Flash

    +0

    :) 예, 옵션이 꽤 제한적입니다. ASP.NET의 특성입니다. .이것이 내가 MVC의 큰 팬이 된 이유입니다. 가벼운 렌더링, 부풀린 마크 업, 필요한 것만 제공하는 강력한 프레임 워크입니다. – KodeKreachor

    답변

    0

    경우 아무도 내가 그리드의 각 행 내부의 ListView를 가지고 있기 때문에 발생하는 한, 비슷한 문제가있다. ListView를 Repeater로 대체 했으므로 viewstate는 더 이상 문제가되지 않습니다.

    1

    당신이 페이지에 표시되는 숨겨진 필드뿐만 아니라 ViewState를 위해, 그것은 또한 ControlState이 포함되어 있습니다 : 여기


    는 위반의 GridView에서 발휘합니다. 제어 상태를 비활성화 할 수있는 방법이 없으므로 제어 상태를 유지해야합니다. 그리드가 몇 개의 아이템을 표시하고 있습니까?

    마지막 옵션으로 생성 된 viewstate 필드를 압축하는 것이 좋습니다. 경우 ControlState이

    +0

    그리드에 많은 항목이 표시되고 문제가 많을수록 문제가 악화됩니다. 그것은 각 행의 마지막 셀 안에있어 ListView 때문에 발생하는 것으로 보인다. – Flash

    1

    를 작동하는 방법

    Here

    당신이 설명하는 MSDN 문서를 가지고 당신의 GridView입니다 다음보기의 크기를 줄일 수 있습니다 (즉, 그것은 다시 게시 자식 컨트롤을 포함하지 않는,이다) 대화 형이 아닌 페이지의 Render 방법까지 대기하여 상태는 그리드를 바인딩 호출됩니다

    Protected Overrides Sub Render(writer As HtmlTextWriter) 
        MyGrid.DataSource = ... 
        MyGrid.DataBind() 
        MyBase.Render(writer) 
    End Sub 
    
    0

    또 다른 옵션은 Flesk.ViewState를 사용하는 것입니다.

    그것은 때로는 ViewState에 함께 사는 ASPNET에서 피할 등 다른 사람처럼

    말, 세션, 그것을 압축 파일에 대한 viewstate가 넣을 수 있습니다.

    MVC로 이동하는 것이 가장 좋은 이유는 무엇입니까?