가 나는 EntityDataSource 있습니다컨트롤 매개 변수가 유효하지 않은 경우 EntityDataSource가 쿼리를 실행하지 못하게하려면 어떻게해야합니까? ASP.NET 웹 페이지에서
<asp:EntityDataSource ID="EntityDataSourceOrders" runat="server"
ConnectionString="name=EntitiesContext"
DefaultContainerName="EntitiesContext"
EntitySetName="Order"
Select="it.OrderID,it.OrderCode,it.OrderDateTime"
Where="it.OrderDateTime >= @DateTimeFrom AND it.OrderDateTime <= @DateTimeTo"
OrderBy="it.SOrderCode"
StoreOriginalValuesInViewState="False" >
<WhereParameters>
<asp:ControlParameter Name="DateTimeFrom"
ControlID="TextBoxDateTimeFrom"
DbType="DateTime"
PropertyName="Text" />
<asp:ControlParameter Name="DateTimeTo"
ControlID="TextBoxDateTimeTo"
DbType="DateTime"
PropertyName="Text" />
</WhereParameters>
</asp:EntityDataSource>
나의 선택에 대한 가장 빠른 최신 날짜를 입력하는 페이지에 두 개의 텍스트 상자를 거기에 당신이 볼 수 있듯이. 이러한 텍스트 상자는 EntityDataSource의 Where 절에있는 ControlParameters로 사용됩니다.
누군가가 그 ControlParameter 텍스트 상자 중 하나에 "32/01/2010"과 같은 잘못된 날짜를 입력했다고 상상해보십시오.
처음에는 클라이언트 측에서 (ASP.NET 유효성 검사기를 사용하여) 유효성을 검사 할 수 있으므로 입력이 유효하지 않은 경우 다시 게시를 방지합니다.
그러나 서버 쪽에서 더 중요한 "최종"유효성 검사를 어떻게 구현합니까? 특히 Where (어떤 메서드 또는 이벤트)를 구현하여 EntityDataSource가 Textbox에 유효하지 않은 DateTime 값을 가진 쿼리를 실행하지 못하게합니까?
기본적으로 내 생각은 Page.Validate()
을 호출 한 다음 Page.IsValid
을 호출하고 IsValid가 false를 반환하면 EntityDataSource 쿼리 실행을 "취소"(또는 전혀 시작하지 못하게)하는 것입니다. 그러나 쿼리 실행을 방지하기 위해 어디서 또는 어떤 이벤트에서 EntityDataSource에 연결할 수 있는지 알 수 없습니다.
아마도 나는 잘못된 방향으로 생각하고 있습니다. 누군가는 무엇을 해야할지 생각하고 있습니까?
도움을 위해 미리 감사드립니다!
@ 스 페인 : 귀하의 제안을 이해합니다. 그러나 문제는 유효성 검사가 실패 할 경우 어떻게 해야할지 모르겠다는 것입니다. 예를 들어 : 언급 한 ButtonClick 이벤트에서'Page.IsValid'를 체크하고 false를 반환합니다. 지금 뭐야? EntityDataSource에 잘못된 날짜가 포함 된 쿼리를 실행하지 말라고 말하고 싶습니다. (대신 사용자는 처음에 날짜를 수정해야합니다.) 제가 생각할 수있는 유일한 방법은 TextBox를 지우는 것입니다. 그렇지 않으면 EntityDataSource의 ControlParameter 컬렉션이 TextBoxes에서 잘못된 날짜를 "자동으로"가져와 예외를 throw합니다. – Slauma
답을 업데이트했습니다. 나는 이것이 당신의 질문을 상상해 보았다고 생각합니다. – Steven
좋아요! 그게 바로 제가 찾고 있던 것입니다! 그리고 그렇게 쉽게, 당황스러워서 나는 그 사건을 보지 못했습니다. 고마워요! – Slauma