2016-09-30 10 views
0

최소한의 코딩을 사용하여 WebForms에 대한 .NET 4.5 모델 바인딩을 활용하는 매우 간단한 ListView를 설정했습니다. modelbinding을 여러 사이트 페이지에서 성공적으로 사용했으며 잘 알고 있지만 최근에는 정렬 할 때 데이터를 두 번 가져 오는 것으로 나타났습니다. 나는이 테스트 케이스로 그것을 소진하고 MasterPage 내에서 사용할 때만 문제가 발생했는지 확인했다.정렬 할 때와 마스터 페이지를 사용할 때 모델 바인딩 선택 메서드가 두 번 실행되는 이유는 무엇입니까?

ASPX/CS는 :

//webform-test.aspx 
    <%@ Page Title="" Language="C#" MasterPageFile="WebformTest.Master" CodeBehind="webform-test.aspx.cs" Inherits="IPA.webform_test" AutoEventWireup="true" %> 

    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
     Test<br> 
     <asp:ListView ID="lvEmployee" runat="server" ItemType="My.Entities.Employee" SelectMethod="lvEmployee_GetData"> 
      <ItemTemplate> 
       <tr> 
        <td><asp:Button ID="btnE" runat="server" CommandName="Edit" Text="edit" /></td> 
        <td><asp:DynamicControl runat="server" DataField="id" Mode="ReadOnly" /></td> 
        <td><asp:DynamicControl runat="server" DataField="LastName" /></td> 
        <td><asp:DynamicControl runat="server" DataField="FirstName" /></td> 
       </tr> 
      </ItemTemplate> 
      <LayoutTemplate> 
       <table> 
        <tr> 
         <th></th> 
         <th><asp:LinkButton ID="lnkId" runat="server" CommandName="Sort" CommandArgument="id">Id</asp:LinkButton></th> 
         <th>Last Name</th> 
         <th>First Name</th> 
        </tr> 
        <tr id="itemPlaceholder" runat="server"></tr> 
       </table> 
      </LayoutTemplate> 
     </asp:ListView> 
    </asp:Content> 

    //webform-test.aspx.cs 
    using My.Entities; 
    using System; 
    using System.Linq; 

    namespace IPA 
    { 
     public partial class webform_test : System.Web.UI.Page 
     { 
      protected void Page_Load(object sender, EventArgs e) 
      { 
       if (!IsPostBack) 
       { 
       } 
       else 
       { 
       } 
      } 

      public IQueryable<My.Entities.Employee> lvEmployee_GetData() 
      { 
       var ent = Employee.GetAll(); 
       return ent; 
      } 
     } 
    } 

MASTER : 나는 일종의 클릭하면

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="WebformTest.Master.cs" Inherits="IPA.WebformTest" ViewStateMode="Disabled" EnableViewState="false" %> 

    <!DOCTYPE html> 
    <html lang="en"> 
    <head runat="server"> 
     <title>TEST PAGE</title> 
     <meta charset="utf-8" /> 
     <meta http-equiv="X-UA-Compatible" content="IE-edge" /> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <asp:ContentPlaceHolder ID="head" runat="server"></asp:ContentPlaceHolder> 
    </head> 
    <body class="cbp-spmenu-push admin"> 
     <form id="form1" runat="server"> 
      <div>Master</div> 
      <asp:ContentPlaceHolder ID="MainContent" runat="server"></asp:ContentPlaceHolder> 
      <asp:ContentPlaceHolder ID="foot" runat="server"></asp:ContentPlaceHolder> 
     </form> 
    </body> 
    </html> 

    using System; 

    namespace IPA 
    { 
     public partial class WebformTest : System.Web.UI.MasterPage 
     { 
      protected void Page_Load(object sender, EventArgs e) 
      { 
      } 
     } 
    } 

내가 var ent = Employee.GetAll(); 및 디버그에 중단 점을 넣을 경우, 그것은 데이터 벌금을 잡고, 다음, 그 중단 점을 명중 다시 마스터 페이지로 이동 한 다음 마스터의 PageLoad 다음에 중단 점을 오른쪽으로 이동하고 데이터를 다시로드합니다 (F11을 통해 단계별 실행). 나머지 부분은 완전히 친숙한 부분이므로 이해할 수없는 마지막 부분입니다. ModelBinding주기에 빠진 것이 있습니까?

더 중요한 이유는 어떻게 영향을 미쳐 다시 게시 당 한 번만 데이터를 가져올 수 있습니까?

추가/업데이트] 정보

:

<asp:GridView ID="gvEmployee" runat="server" ItemType="My.Entities.Employee" DataKeyNames="id" SelectMethod="gvEmployee_GetData" AllowSorting="true"> 
</asp:GridView> 

두 번 내 데이터 검색을 치지않습니다이 : 나는 같은의 GridView와 ListView에 교체. 이것은 안심하고 좌절감이 많아서 ListView 구현 또는 ListView 컨트롤 자체에 주목합니다.

답변

0

다른 프로젝트에서이 문제가 다시 발생했습니다. 내가 Masterpage이 지시자를 설정했기 때문에 문제가 발생

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="WebformTest.Master.cs" 
    Inherits="IPA.WebformTest" ViewStateMode="Disabled" EnableViewState="false" %> 

따라서 사용을 디폴트, ViewStateMode="Disabled"을 제거함으로써 문제가 해결. 나는 왜 그리고 새로운 질문을 위해 그것을 떠날 지 잘 모르겠다.

두 번 게시되지 않았습니다. GetData 메서드를 한 번에 두 번 누르기 만하면됩니다. F11 스텝 디버깅].