최소한의 코딩을 사용하여 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 컨트롤 자체에 주목합니다.