2013-07-19 107 views
2

我有一個母版頁和一個Default.aspx頁面。我的下拉菜單<select>在主頁上。在母版頁上從下拉列表中獲取價值

我想從母版頁上的下拉列表中選擇一個月份,並將其分配給不同類別的變量。然後,default.aspx頁面必須使用該變量從數據庫中選擇數據,其中日期等於我分配給該變量的日期。

之所以選擇在母版頁上,是因爲選擇器應該在所有的頁面通過網站。

導致此問題的主要原因是defauls.aspx頁面上的Page_Load event,它在Master頁面中激發之前 Page_Load。

如果我嘗試Page_Init,它工作,但選擇器代碼保持返回0作爲值。我也嘗試使用HiddenField,它也失敗了。我很感激任何幫助!


Site1.Master:

   <select id="SelectMonth" runat="server" onchange="CmbChange();"> 
        <option id="Select" value="0">[Select Month]</option> 
        <option id="January" value="1">January</option> 
        <option id="February" value="2">February</option> 
        <option id="March" value="3">March</option> 
        <option id="April" value="4">April</option> 
        <option id="May" value="5">May</option> 
        <option id="June" value="6">June</option> 
        <option id="July" value="7">July</option> 
        <option id="August" value="8">August</option> 
        <option id="September" value="9">September</option> 
        <option id="October" value="10">October</option> 
        <option id="November" value="11">November</option> 
        <option id="December" value="12">December</option> 
       </select> 

       <script type="text/javascript"> 
        function CmbChange(obj) { 
         var cmbValue = document.getElementById("SelectMonth").value; 
         __doPostBack('SelectMonth', cmbValue); 
        } 
       </script> 

Site1.Master.cs:

protected void Page_Load(object sender, EventArgs e) 
    { 
     int month = Convert.ToInt32(SelectMonth.Value); 

     if (month > 0) 
     { 
      Date.Month = month; 
     } 
     else 
     { 
      Date.Month = DateTime.Now.Month; 
     } 
    } 

的Default.aspx:

protected void Page_Load(object sender, EventArgs e) 
    { 
     // Example 
     var sql = "SELECT * FROM Data WHERE Month = " + Date.Month; 
    } 

Date.cs:

public static class Date 
{ 
    public static int Month { get; set; } 
} 

謝謝!

+0

歡迎來到StackOverflow!請在您的問題中發佈相關代碼而不是提供鏈接,它將幫助您獲得答案:http://meta.stackexchange.com/questions/125997/something-in-my-web-site-or-project -doesnt-work-can-i-just-paste-a-link-to-it – cfs

回答

1

爲什麼不嘗試使用Default.aspx.vb Page_PreRender,並使用MasterPage上的Page_Load來獲取值呢?

或可選擇地使用包括:

<%@ MasterType VirtualPath="~/MasterPages/Site.Master" %> 

,並調用函數在你的母版頁中寫道得到下拉值使用:

Master.FunctionNamedOnMasterPage() 

Here是對MSDN網站的鏈接如何參考MasterPage內容

+0

謝謝!我在Default.aspx上使用了Page_PreRender,現在它工作:) –

0

您需要使用控件的Load並在其中設置變量,因爲控件在頁面之前加載。