문제

저는 기존 ASP에서 ASP.NET으로 이동 중이며 이미 "viewstate"라고 알려진 것을 많이 접했습니다.나는 내 가정으로 총을 튀길 수도 있지만 매우 번거로워 보입니다.나는 과거에 많은 ASP 양식을 개발했지만 상태를 유지하는 데 문제가 있었던 적이 없습니다.다른 방법이 있습니까? 아니면 ASP.NET에서 이 Viewstate를 배워야 합니까?저는 Visual Studio 2008, VB.NET을 언어 숨김 코드로 사용하고 있으며 SQL Server 2005에서는 Framework v3.5를 사용하고 있습니다.

도움이 되었습니까?

해결책

당신은 할 필요가 없습니다. 체크 아웃 MVC 프레임 워크. ViewState를 제거하고 오래된 ASP (적어도이 관점에서)로 작동합니다.

다른 팁

ViewState를 이해하려면 이 게시물 시리즈를 꼭 읽어야 합니다.

나는 이를 비활성화하고 Load 대신 Page_Init에서 대부분의 작업을 수행합니다(ControlState 때문에 값은 계속 유지됩니다).이 설정은 나에게 잘 맞았습니다.

ViewState는 선택 사항이지만 도움이됩니다. Viewstate는 서버 측의 컨트롤에서 발생하는 모든 변경 사항입니다. 따라서 라벨에 텍스트를 할당하고 모든 Postback에서 텍스트를 재 할당하지 않고도 해당 텍스트가 지속되기를 원한다면이를 유지하고 싶을 것입니다. 내가 항상 ViewState를 남겨 두는 또 다른 예는 데이터 라운드입니다.

즉, 같은 이유로 ViewState를 끄는 것이 도움이 될 때가 있습니다. 예를 들어, I가있는 곳입니다 언제나 ViewState를 끄는 것은 메시지 레이블입니다. 이렇게하면 사용자에게 메시지를 인쇄해야 할 때 (한 번만 나타난 다음 사라져야합니다) 라벨에 텍스트를 추가 한 다음 잊어 버립니다. 다음 PostBack 동안, 레이블은 해당 컨트롤 (이 경우 빈 문자열)에 대한 ASPX 선언에서 발견되는 텍스트로 자동 복귀됩니다.

이제 이것은 포스트 백 동안 IIS에 게시 된 값 인 Form Collection과 관련이 없습니다. 양식 컬렉션은 사용자가 입력하는 값을 양식 요소 (텍스트 상자, 확인란, 액체 목록 등)로 보냅니다. 이 .NET이 적절한 장소로 채워질 것입니다. 후에 ViewState가 처리되었습니다.

이런 식으로 클라이언트에게 "Hi there"라는 문구가있는 텍스트 상자를 보내면 사용자는 "YA를 참조"로 변경 한 다음 양식을 제출 한 다음 Page_Load 이벤트가 발사 될 때까지 텍스트 상자에 걸리는 내용을 제출합니다. 텍스트 속성에서 "나중에".

고전적인 ASP에서 우리는 항상 숨겨진 필드를 사용하여 일을했습니다. ViewState는 자동으로 그렇게하는 방법 일뿐입니다. 저를 믿으십시오. 학습 곡선은 생각만큼 높지 않습니다.

ViewState를 끄면 일부 컨트롤이 깊이 파괴되므로 이러한 문제를 해결할 준비를하십시오. 게으르고 남겨 두는 것이 가장 쉽지만 확인되지 않은 상태로 viewstate는 HTML 크기의 30%를 쉽게 설명 할 수 있습니다.

예를 들어, 드롭 다운이 있다고 가정하면 과일 목록에 묶습니다. 페이지로드의 if (! ispostback) {} 블록에 바인딩됩니다. ViewState를 끄면 버튼을 클릭하면 항목이 손실됩니다. 그들은 모든 페이지로드를 묶어야합니다. 선택한 인덱스도 손실되므로 request.form [] 변수를 제거해야합니다.

Viewstate는 ASP.NET으로 작업할 때 패키지의 일부입니다.기본 페이지/웹 사이트의 경우 Viewstate 사용 방법을 '알 필요'는 없습니다.페이지에 컨트롤을 넣을 때에만 사용됩니다.

프로젝트 수준에서 Viewstate를 해제하더라도 일부 개별 컨트롤은 여전히 ​​Viewstate를 사용하여 정보를 유지하므로 ASP.NET에서 Viewstate를 피하는 것은 매우 어렵습니다.

Viewstate를 처리하지 않으려면 ASP.NET MVC 프레임워크 사용을 고려하세요.Classic ASP에서 제공되는 MVC 프레임워크가 더 편할 것입니다.

ViewState는 거의 모든 경우가 아니라면 거의 모든 선택 사항입니다. viewStateEnabled = false가 있더라도 ASP.NET은 필드를 자동으로 재구성합니다. 나는 5 년 또는 6 년 동안 ASP.NET을 사용해 왔으며 ViewState에 의존 할 필요가 없었습니다. 가능할 때도 비활성화합니다.

ViewState는 대부분 자동으로 작동합니다. ASP.NET이 모든 컨트롤의 현재 상태를 추적하는 방법입니다.

추가 데이터를 저장하려면 ViewState도 수동으로 사용할 수 있습니다. 그것은 간단합니다.

Viewstate["Key"] = value;

이에 대한 유일한 경고는 ViewState에 저장하는 모든 객체가 직렬화 가능해야한다는 것입니다.

최근에 직접 시작하기 시작했기 때문에 Datagrids 및 Dropdownlist에서 ViewState를 피하는 것이 좋습니다. 나는 재미를 위해 이것을하지 않았다. 나는 다른 문제를 일으키기 때문에 너무 커져서 자랐던 페이지를 수정해야했다. 그러나 이것은 쉬운 것으로 판명되었고 결과는 매우 극적이어서 매우 기뻐했습니다. 물론 작은 간단한 앱이나 소량의 데이터의 경우 필요하지 않지만 반면에 일관성이 있어야합니다 (항상 알려진에서 알려진 것으로 이동하여 지속적으로 프로세스를 개선 할 수 있습니다 ...). 여분의 수하물을 가지고 다니십시오.

이것은 당신의 작은 수동 개입이 필요합니다. 예를 들어, 드롭 다운 목록을 위해 ViewState를 끄면 각 Postback에서 리드 인 다음 요청 객체에서 선택한 값을 복원해야합니다. 이것에 대해 읽어야하지만 Google에는 쉽게 사용할 수있는 정보가 많이 있습니다.

ViewState는 ASP.NET Controls "Rooted"에 대해 자동으로 유지됩니다. 해야 할 일이 거의없고, 값과 다른 정보는 숨겨진 입력 B64로 인코딩 된 것으로 전달됩니다. 원한다면 볼 수 있지만 중요하지 않으며 모두 자동으로 처리됩니다.

자신의 소비에 대한 코드를 작성하는 경우 끄고 걱정하지 않아도됩니다.

아마도 다른 사람들이 작성한 웹 양식 코드를 유지할 것이므로 구성 옵션과 통증 지점이 무엇인지 알아야합니다. 내가 생각할 수있는 최고 몇 명

  • 현장, 페이지 및 제어 수준에서 비활성화하는 방법
  • Machinekey가 웹 농장과 관련이있는 이유
  • 이벤트 로그가 ViewStateAuthentication 오류로 가득 찬 이유
  • ViewStateUserKey는 무엇입니까?

실제 학습 곡선 측면에서 이것은 아마도 몇 개의 MSDN 기사를 철저히 읽었을 것입니다.

ViewState는 웹 양식 은유에 내재 된 필요한 악입니다. 나는 개인적 으로이 방법론이 쓸모없고 부풀어 오르고 일반적으로 웹 친화적이지 않다는 것을 알게됩니다. 위에서 제안한대로 MVC 프레임 워크를 확인하십시오.

ViewState를 "캐시"로 사용하여 데이터를 앞뒤로 전달하려는 유혹을 피하는 것이 좋습니다 (클러스터 설정 및 SQL 지원 세션 상태가 없기 때문에 웹 사이트 가이 작업을 수행하는 것을 보았습니다). 데이터는 직렬화되어 페이지에 추가되며 모든 요청마다 라운드 트립을 수행하여 페이지의 총 크기를 추가하고 사이트로드가 느리게 만들어야합니다.

'<%@ Control Language="C#" AutoEventWireup="true" CodeFile="HomePage.ascx.cs" Inherits="HomePage" %>
<script runat="server">
  void testHF_ValueChanged(object sender, EventArgs e)
    {
       this.HFvalue.Text = this.testHF.Value ;

    }
</script>
<asp:Label ID="UserNamelbl" runat="server" Text="User Name : " Visible="false"></asp:Label>
<asp:TextBox ID="UserNametxt" runat="server" Visible="false" ></asp:TextBox>
 <asp:Label ID="HFvalue" Text="......" runat="server"></asp:Label>
 <asp:HiddenField ID="testHF"
OnValueChanged="testHF_ValueChanged"
value="" 
runat="server" ></asp:HiddenField>
<input type="submit" name="SubmitButton" value="Submit" onclick="CL()" />

<script type="text/javascript">
    function CL() 
    {
        this.testHF.Value = this.UserNametxt.Text;  
    }
</script>
'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top