2013-11-23 50 views
0

讓我們說你有靜態方法,您想要訪問下拉列表中選擇的值文本框值和一些其他控件值..我的問題是,我總是第一次選擇下拉列表即使我選擇在下拉菜單中的任何值訪問控制值在靜態或asp.net中的共享方法

我做了什麼我創建下拉列表的屬性,則獲得的Page_Load事件的值,那麼這個值傳遞到靜態方法

Partial Public Class stocklist 
     Inherits System.Web.UI.Page 

    'Static or shared Property' 

     Private Shared _make As DropDownList 

     Public Shared Property MAKE() As DropDownList 
      Get 
       Return _make 
      End Get 
      Set(ByVal value As DropDownList) 
       _make = value 
      End Set 
     End Property 

    'Page Load' 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
      'ddlMake is the dropdownlist and MAKE is a Property' 

        MAKE = ddlMake 
    End Sub 

    'Static or shared Web Method' 
    <WebMethod()> _ 
    Public Shared Function Select_Search() As SearchParameters() 
     Dim JSON As New List(Of SearchParameters)() 

     Dim dtst As New DataTable() 


     Dim myList As New dsStockTableAdapters.newSTOCK_LISTTableAdapter() 
     dtst = myList.GetData(MAKE.SelectedValue, "0", "0", "0", "0", DisplayType, "", "", "", "Any", "", "", "", "", "", 0, "", "", 0, "") 




     Try 
      For Each rdr As DataRow In dtst.Rows 
       Dim SRCH As New SearchParameters() 
       SRCH.CHASSIS_NO = rdr("CHASSIS_NO").ToString() 
       SRCH.MODEL = rdr("MODEL").ToString() 
       SRCH.color = rdr("color").ToString() 
       SRCH.TRANSMISSION = rdr("TRANSMISSION").ToString() 
       SRCH.DOOR = rdr("DOOR").ToString() 
       SRCH.MAKE = rdr("MAKE").ToString() 
       SRCH.Image1 = rdr("Image1").ToString() 
       SRCH.MODEL_DESCRIPTION = rdr("MODEL_DESCRIPTION").ToString() 

       JSON.Add(SRCH) 


      Next 
     Catch 

     Finally 
     End Try 
     Return JSON.ToArray() 
    End Function 
End Class 

現在「做」屬性的值總是顯示第一個被選中的值爲0的感染,我在dropdownlist中選擇了另一個值,但它總是顯示在調試時第一個值爲「0」。

如何在靜態方法中訪問dropdownlist的選定值???

回答

1

,而不是試圖讓從靜態頁面方法服務器控件的值,都jQuery的獲得所選擇的值,並將其發送到你的頁面的方法,就像這樣:

$(document).ready(function() { 
    var selectedMake = $('#<%= MAKE.ClientID %>' option:selected").text(); 

    var args = { 
     theMake : selectedMake 
    } 

    $.ajax({ 
     type: "POST", 
     url: "YourPageName.aspx/Select_Search", 
     data: JSON.stringify(args), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(result) { 
      // Do something with result here 
     } 
    }); 
}); 

這需要改變靜態網頁的方法,爲了讓現在接受一個參數,像這樣:

'Static or shared Web Method' 
<WebMethod()> _ 
Public Shared Function Select_Search(theMake As String) As string 
    Dim dtst As New DataTable() 
    Dim List As New dsStockTableAdapters.newSTOCK_LISTTableAdapter() 
    dtst = List.GetData(theMake) 
    Return dtst 
End Function 

現在,你不必試圖找到一個靜態方法服務器控件的值,因爲它被送往以靜態方法作爲參數。

注:

  • 的JSON.stringify函數(https://github.com/douglascrockford/JSON-js)的[JSON.js庫]的一部分>>
  • 上面的例子中廣泛使用的jQuery,確保你有在您的頁面或母版頁中,如果您正在使用它們,請參考jQuery腳本文件
  • 我不確定您在頁面方法中實際做了什麼,因爲它被聲明爲返回String,但它似乎試圖返回一個列表,以及一個未使用的Catch塊,我刪除了這些ed Catch和Finally塊,並讓它返回dtst對象,隨時根據需要進行更正。

UPDATE:

你有服務器端,以便在Static Web方法獲得了價值的唯一選擇是使用Session緩存,當它來存儲下拉列表的選擇值通過下拉的SelectedIndexChanged事件改變了,就像這樣:

Sub Index_Changed(sender As Object, e As EventArgs)   
    Session("SelectedMakeValue") = ddlMake.SelectedItem.Value 
End Sub 

現在你必須給Static Web方法訪問Session緩存,就像這樣:

'Static or shared Web Method' 
<WebMethod(EnableSession := True)> _ 
Public Shared Function Select_Search() As string 
    Dim dtst As New DataTable() 
    Dim List As New dsStockTableAdapters.newSTOCK_LISTTableAdapter() 
    Dim theMake As String = HttpContext.Current.Session("SelectedMakeValue").ToString() 
    dtst = List.GetData() 
    Return dtst 
End Function 

注:必須使用完全合格的名稱爲Session對象,這是HttpContext.Current.Session;否則你會得到錯誤。

+0

喜@karl安德森我知道如何通過Ajax的參數值,但我需要做的是在codebhind ..我剛纔問到我是用點問題共享方法是我現在更新 –

+0

很長@SiddiqBaig - 更新的答案包括使用'Session'緩存通過服務器端代碼存儲選定值的備選方案。 –