gpt4 book ai didi

asp.net-ajax - AJAX - 如何将值传递回服务器

转载 作者:行者123 更新时间:2023-12-04 18:55:06 27 4
gpt4 key购买 nike

第一次在 .NET 中使用 UpdatePanels。

我有一个带有指向 FormView 控件上的事件的触发器的更新面板。 UpdatePanel 拥有一个 ListView,其中包含来自单独数据库的相关数据。

当 UpdatePanel 刷新时,它需要来自 FormView 控件的值,以便在服务器上它可以使用它们来查询数据库。

对于我的生活,我无法弄清楚如何获得这些值(value)观。我触发的事件有它们,但我希望更新面板异步刷新。如何将值传递给面板上的加载事件?

谷歌搜索了这个令人作呕的广告,似乎无法在这里找到答案。链接或解释将非常有帮助..

杰夫

最佳答案

创建一个 javascript 函数来收集表单数据,然后将该数据发送到 ASHX 处理程序。 ASHX 处理程序将做一些工作,并可以回复一个响应。

这是我制作的一个示例,它调用数据库以使用 AJAX 调用填充网格。有更好的 AJAX 库(原型(prototype)、ExtJS 等),但这是原始交易。 (我 知道 这可以被重构为更干净,但你可以很好地理解这个想法)

像这样工作...

  • 用户在搜索框中输入文本,
  • 用户点击搜索按钮,
  • JavaScript 获取表单数据,
  • javascript 对 ASHX 进行 ajax 调用,
  • ASHX 收到请求,
  • ASHX 查询数据库,
  • ASHX 将响应解析为 JSON/Javascript 数组,
  • ASHX 发送响应,
  • Javascript 收到响应,
  • javascript Eval() 对对象的响应,
  • javascript 迭代对象属性并填充网格

  • html 将如下所示...
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>Untitled Page</title>
    <script type="text/javascript" src="AjaxHelper.js"></script>
    </head>
    <body>
    <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="txtSearchValue" runat="server"></asp:TextBox>
    <input id="btnSearch" type="button" value="Search by partial full name" onclick="doSearch()"/>

    <igtbl:ultrawebgrid id="uwgUsers" runat="server"
    //infragistics grid crap
    </igtbl:ultrawebgrid>--%>
    </div>
    </form>
    </body>
    </html>

    单击时触发的脚本将如下所示...
    //this is tied to the button click. It takes care of input cleanup and calling the AJAX method
    function doSearch(){
    var eleVal;
    var eleBtn;
    eleVal = document.getElementById('txtSearchValue').value;
    eleBtn = document.getElementById('btnSearch');
    eleVal = trim(eleVal);
    if (eleVal.length > 0) {
    eleBtn.value = 'Searching...';
    eleBtn.disabled = true;
    refreshGridData(eleVal);
    }
    else {
    alert("Please enter a value to search with. Unabated searches are not permitted.");
    }
    }

    //This is the function that will go out and get the data and call load the Grid on AJAX call
    //return.
    function refreshGridData(searchString){

    if (searchString =='undefined'){
    searchString = "";
    }

    var xhr;
    var gridData;
    var url;

    url = "DefaultHandler.ashx?partialUserFullName=" + escape(searchString);
    xhr = GetXMLHttpRequestObject();

    xhr.onreadystatechange = function() {
    if (xhr.readystate==4) {
    gridData = eval(xhr.responseText);
    if (gridData.length > 0) {
    //clear and fill the grid
    clearAndPopulateGrid(gridData);
    }
    else {
    //display appropriate message
    }
    } //if (xhr.readystate==4) {
    } //xhr.onreadystatechange = function() {

    xhr.open("GET", url, true);
    xhr.send(null);
    }

    //this does the grid clearing and population, and enables the search button when complete.
    function clearAndPopulateGrid(jsonObject) {

    var grid = igtbl_getGridById('uwgUsers');
    var eleBtn;
    eleBtn = document.getElementById('btnSearch');

    //clear the rows
    for (x = grid.Rows.length; x >= 0; x--) {
    grid.Rows.remove(x, false);
    }

    //add the new ones
    for (x = 0; x < jsonObject.length; x++) {
    var newRow = igtbl_addNew(grid.Id, 0, false, false);
    //the cells should not be referenced by index value, so a name lookup should be implemented
    newRow.getCell(0).setValue(jsonObject[x][1]);
    newRow.getCell(1).setValue(jsonObject[x][2]);
    newRow.getCell(2).setValue(jsonObject[x][3]);
    }

    grid = null;

    eleBtn.disabled = false;
    eleBtn.value = "Search by partial full name";
    }


    // this function will return the XMLHttpRequest Object for the current browser
    function GetXMLHttpRequestObject() {

    var XHR; //the object to return
    var ua = navigator.userAgent.toLowerCase(); //gets the useragent text
    try
    {
    //determine the browser type
    if (!window.ActiveXObject)
    { //Non IE Browsers
    XHR = new XMLHttpRequest();
    }
    else
    {
    if (ua.indexOf('msie 5') == -1)
    { //IE 5.x
    XHR = new ActiveXObject("Msxml2.XMLHTTP");
    }
    else
    { //IE 6.x and up
    XHR = new ActiveXObject("Microsoft.XMLHTTP");
    }
    } //end if (!window.ActiveXObject)

    if (XHR == null)
    {
    throw "Unable to instantiate the XMLHTTPRequest object.";
    }
    }
    catch (e)
    {
    alert("This browser does not appear to support AJAX functionality. error: " + e.name
    + " description: " + e.message);
    }
    return XHR;
    } //end function GetXMLHttpRequestObject()

    function trim(stringToTrim){
    return stringToTrim.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
    }

    ashx 处理程序看起来像这样....
    Imports System.Web
    Imports System.Web.Services
    Imports System.Data
    Imports System.Data.SqlClient

    Public Class DefaultHandler
    Implements System.Web.IHttpHandler

    Private Const CONN_STRING As String = "Data Source=;Initial Catalog=;User ID=;Password=;"

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

    context.Response.ContentType = "text/plain"
    context.Response.Expires = -1

    Dim strPartialUserName As String
    Dim strReturnValue As String = String.Empty

    If context.Request.QueryString("partialUserFullName") Is Nothing = False Then
    strPartialUserName = context.Request.QueryString("partialUserFullName").ToString()

    If String.IsNullOrEmpty(strPartialUserName) = False Then
    strReturnValue = SearchAndReturnJSResult(strPartialUserName)
    End If
    End If

    context.Response.Write(strReturnValue)

    End Sub


    Private Function SearchAndReturnJSResult(ByVal partialUserName As String) As String

    Dim strReturnValue As New StringBuilder()
    Dim conn As SqlConnection
    Dim strSQL As New StringBuilder()
    Dim objParam As SqlParameter
    Dim da As SqlDataAdapter
    Dim ds As New DataSet()
    Dim dr As DataRow

    'define sql
    strSQL.Append(" SELECT ")
    strSQL.Append(" [id] ")
    strSQL.Append(" ,([first_name] + ' ' + [last_name]) ")
    strSQL.Append(" ,[email] ")
    strSQL.Append(" FROM [person] (NOLOCK) ")
    strSQL.Append(" WHERE [last_name] LIKE @lastName")

    'clean up the partial user name for use in a like search
    If partialUserName.EndsWith("%", StringComparison.InvariantCultureIgnoreCase) = False Then
    partialUserName = partialUserName & "%"
    End If

    If partialUserName.StartsWith("%", StringComparison.InvariantCultureIgnoreCase) = False Then
    partialUserName = partialUserName.Insert(0, "%")
    End If

    'create the oledb parameter... parameterized queries perform far better on repeatable
    'operations
    objParam = New SqlParameter("@lastName", SqlDbType.VarChar, 100)
    objParam.Value = partialUserName

    conn = New SqlConnection(CONN_STRING)
    da = New SqlDataAdapter(strSQL.ToString(), conn)
    da.SelectCommand.Parameters.Add(objParam)

    Try 'to get a dataset.
    da.Fill(ds)
    Catch sqlex As SqlException
    'Throw an appropriate exception if you can add details that will help understand the problem.
    Throw New DataException("Unable to retrieve the results from the user search.", sqlex)
    Finally
    If conn.State = ConnectionState.Open Then
    conn.Close()
    End If
    conn.Dispose()
    da.Dispose()
    End Try

    'make sure we have a return value
    If ds Is Nothing OrElse ds.Tables(0) Is Nothing OrElse ds.Tables(0).Rows.Count <= 0 Then
    Return String.Empty
    End If

    'This converts the table into JS array.
    strReturnValue.Append("[")

    For Each dr In ds.Tables(0).Rows
    strReturnValue.Append("['" & CStr(dr("username")) & "','" & CStr(dr("userfullname")) & "','" & CStr(dr("useremail")) & "'],")
    Next

    strReturnValue.Remove(strReturnValue.Length - 1, 1)
    strReturnValue.Append("]")

    'de-allocate what can be deallocated. Setting to Nothing for smaller types may
    'incur performance hit because of a forced allocation to nothing before they are deallocated
    'by garbage collection.
    ds.Dispose()
    strSQL.Length = 0

    Return strReturnValue.ToString()

    End Function


    ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
    Get
    Return False
    End Get
    End Property

    End Class

    关于asp.net-ajax - AJAX - 如何将值传递回服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/85500/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com