繁体   English   中英

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

[英]Access Control value in static or shared Method in asp.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”。

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

不要让jQuery从静态页面方法中的服务器控件中获取值,而是让jQuery获取所选值并将其发送给您的page方法,如下所示:

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

更新:

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

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 否则会出现错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM