假设你有静态方法,你想要访问下拉列表选择值文本框值和一些其他控件值..我的问题是,我总是获得下拉列表的第一个选定值,即使我在下拉列表中选择的任何值
我做了什么我创建了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”。
如何在静态方法中访问下拉列表选择值???
答案 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
;否则你会得到错误。