2015-01-19 6 views
1

ASP.Net 웹 폼 응용 프로그램에서 4 개의 비슷한 페이지에 대한 요구 사항이 있습니다. 네 페이지 모두 드롭 다운과 두 개의 버튼이있는 헤더가 있습니다. 이 헤더에 대한 마스터 페이지를 사용하고 내가 생성해야하는 각각의 다른 페이지에 대한 컨텐츠 페이지를 사용하려고합니다. 내 주인은 다음과 같습니다클라이언트 쪽 처리기를 콘텐츠 페이지에서 마스터 페이지 컨트롤에 추가

나는 콘텐츠 페이지가 반응에 가입 할 수있는 이벤트를 정의한 Processing.master.cs에서
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Processing.master.cs" Inherits="MyProject.Processing" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <link href="../../Stylesheets/Processing.css" type="text/css" rel="stylesheet" /> 
    <script language="javascript" src="../../Scripts/js/Processing.js" type="text/javascript"></script> 
    <asp:ContentPlaceHolder ID="head" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 
<body> 
    <form id="ProcessingForm" height="100%" runat="server"> 
     <asp:Label ID="titleLabel" runat="server" class="bold"></asp:Label> 
     <asp:Label runat="server" ID="storeLabel" Text="Store:" /> 
     <asp:ObjectDataSource runat="server" ID="storesDataSource" TypeName="MyProject.Processing" 
      SelectMethod="GetStoresDataSource"> 
      <SelectParameters> 
       <asp:QueryStringParameter Name="UserName" QueryStringField="eUserName" DefaultValue="" /> 
      </SelectParameters> 
     </asp:ObjectDataSource> 
     <asp:DropDownList runat="server" ID="storeDropdown" AutoPostBack="true" OnSelectedIndexChanged="storeDropdown_SelectedIndexChanged" 
      AppendDataBoundItems="true" DataSourceID="storesDataSource" DataTextField="Display" 
      DataValueField="Number"> 
      <asp:ListItem /> 
     </asp:DropDownList> 
     <asp:Button ID="refreshButton" runat="server" Text="Refresh" OnClick="refreshButton_Click" /> 
     <%-- ************************************************************************************--%> 
     <%-- This is the button that I want to add client side behaviour to from my content pages--%> 
     <%-- ************************************************************************************--%> 
     <asp:Button ID="processButton" runat="server" Text="Process" OnClick="processButton_Click" 
      OnClientClick="DoStuff();" /> 
     <asp:ContentPlaceHolder ID="GridDiv" runat="server" /> 
    </form> 
</body> 
</html> 

때 드롭 다운 변경 : 그래서

public delegate void StoreChangedHandler(object sender, string selectedValue); 
public event StoreChangedHandler OnStoreChanged; 

protected void storeDropdown_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (OnStoreChanged != null) 
    { 
     OnStoreChanged(sender, ((DropDownList)sender).SelectedValue); 
    } 
} 

내용 페이지의의 OnLoad에는 다음이 포함

protected void Page_Load(object sender, EventArgs e) 
{ 
    ((Processing)Master).OnStoreChanged += StockRoomWithMaster_OnSomethingSelected; 
} 

void StockRoomWithMaster_OnSomethingSelected(object sender, string selectedValue) 
{ 
    this.stockReceiptGridView.DataBind(); 
} 

processButton 컨트롤을 클릭 할 때 발생하는 클라이언트 측 DoStuff() 함수 호출이 같은 전략을 수행하는 가장 좋은 방법은 무엇입니까? 나는 Processing.js 파일에서 전역 변수를 선언하고 콘텐츠 페이지의 기능에 할당 할 수 있습니다 :

Processing.js :

var processButtonClickedHandler; 

function DoStuff() 
{ 
    if (processButtonClickedHandler) { 
     processButtonClickedHandler(); 
    } 
} 

의 콘텐츠 페이지에서 :

$(document).ready(function() { 
    processButtonClickedHandler = DoSpecificStuff; 
}); 

function DoSpecificStuff() { 
    // Custom page client side stuff 
} 

답변

0

I 당신이하고있는 방식이 최선이라고 생각하십시오. 나는 DoSpecificStuff에 경고를 두는 테스트 부 (test bu)를 만든 것과 같은 방식으로 만들었습니다.