[英]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.