【问题标题】:Access Control value in static or shared Method in asp.netasp.net 中静态或共享方法中的访问控制值
【发布时间】:2013-11-23 01:26:39
【问题描述】:

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

我做了什么,我创建了一个下拉列表的属性,然后在 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”。

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

【问题讨论】:

    标签: c# asp.net vb.net


    【解决方案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 库]>>(https://github.com/douglascrockford/JSON-js)
    • 的一部分
    • 上面的示例广泛使用了 jQuery,请确保您的页面或母版页中有对 jQuery 脚本文件的引用(如果您正在使用它们)
    • 我不确定您在页面方法中实际在做什么,因为它被声明为返回一个字符串,但它似乎试图返回一个列表以及一个未使用的 Catch 块,我删除了未使用的 Catch,最后块并让它返回 dtst 对象,请随时根据需要更正此问题。

    更新:

    服务器端允许访问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;否则会出错。

    【讨论】:

    • 嗨@karl Anderson 我知道如何在 Ajax 中传递参数值,但我需要在 codebhind 中进行。我只是问了一个问题,我正在使用的共享方法很长,我现在更新了
    • @SiddiqBaig - 更新的答案包括使用Session 缓存通过服务器端代码存储所选值的替代方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多