asp.net中静态或共享方法中的访问控制值

时间:2013-11-23 01:26:39

标签: c# asp.net vb.net

假设你有静态方法,你想要访问下拉列表选择值文本框值和一些其他控件值..我的问题是,我总是获得下拉列表的第一个选定值,即使我在下拉列表中选择的任何值

我做了什么我创建了dropdownlist的属性然后在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

现在一个“MAKE”属性总是显示第一个被选中的值0感染我在下拉列表中选择了另一个值,但是在调试时它总是显示第一个值“0”。

如何在静态方法中访问下拉列表选择值???

1 个答案:

答案 0 :(得分: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
        }
    });
});

这需要更改静态Web方法,以便允许它现在接受参数,如下所示:

'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函数是[JSON.js库]&gt;&gt;(https://github.com/douglascrockford/JSON-js
  • 的一部分   
  • 上面的示例广泛使用了jQuery,请确保您的页面或母版页中有一个引用(如果您使用它们)到jQuery脚本文件
  •   
  • 我不确定你在页面方法中实际做了什么,因为它被声明为返回一个String,但它似乎试图返回一个List,以及一个未使用的Catch块,我删除了未使用的Catch和Finally块并让它返回dtst对象,随时根据需要纠正它。
  •   

更新:

允许访问Static Web方法中的值的服务器端唯一的选项是使用Session缓存来存储下拉列表的选定值,当它通过下拉列表更改时SelectedIndexChanged事件,如下:

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

现在您必须授予Static网络方法访问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;否则你会得到错误。