You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SmartClient ListGrid无数据返回:.aspx与VB.NET交互异常排查

问题排查与修正方案

核心错误点

  1. VB.NET代码笔误
    你在添加DataTable到DataSet时,错误使用了未定义的dtChgs变量,实际应该用创建好的dtNames,导致输出的XML为空。

  2. XML节点不匹配
    前端配置的recordXPath: "/NewDataSet/DATA"要求返回的XML中每行数据节点为<DATA>,但默认DataTable生成的XML节点是<Table>,两者不匹配,前端无法解析数据。

  3. 前端回调写法错误
    fetchData的第二个参数应为函数而非字符串,且绑定DataSource后无需手动调用setData,框架会自动加载数据。

  4. 空值判断逻辑缺陷
    NameList.Count获取的是字符串长度,若输入仅为逗号(如,),会误判为有效输入,应改为判断字符串是否为空或数组长度是否大于0。


修正后的代码

VB.NET(ShowAnimalsList.aspx)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim NameList As String = Request("Names")
    ' 先判断输入是否为空
    If String.IsNullOrEmpty(NameList) Then Return

    Dim Names As String() = NameList.Split(New Char() {","c})
    Dim cTypes As New TypeLib.clsTypes
    Dim Desc As String

    Dim dsNames As New DataSet
    Dim dtNames As New DataTable
    ' 设置TableName,匹配前端的recordXPath
    dtNames.TableName = "DATA"
    dtNames.Columns.Add("AnimalName")
    dtNames.Columns.Add("Desc")

    Try
        For Each Nme As String In Names
            If String.IsNullOrEmpty(Nme.Trim) Then Continue For
            Nme = Nme.Trim
            Desc = cTypes.GetAnimDesc(clsUtility.ConStr, Nme)
            
            Dim row As DataRow = dtNames.NewRow()
            row("AnimalName") = Nme
            row("Desc") = Desc
            dtNames.Rows.Add(row)
        Next
        ' 修正笔误,添加正确的DataTable
        dsNames.Tables.Add(dtNames)
        ' 指定响应内容类型为XML
        Response.ContentType = "text/xml"
        dsNames.WriteXml(Response.OutputStream)

    Catch ex As Exception
        ' 建议添加错误日志便于排查
        ' System.Diagnostics.Debug.WriteLine(ex.ToString())
    End Try
End Sub

前端JS代码

数据源(无需修改,确保recordXPath匹配)
var dataAnimNames = isc.DataSource.create({
    dataURL: "DataScripts/ShowAnimalsList.aspx", 
    recordXPath: "/NewDataSet/DATA", 
    fields: [
        { name: "AnimalName", type: "text", title: "Name" }, 
        { name: "Desc", type: "text", title: "Description" }
    ],
});
加载函数(简化写法)
function LoadAnimDesc() {
    // 直接传递参数,框架自动将数据加载到绑定的Grid
    AnimalsGrid.fetchData({
        Names: Form1.getValue("sNames")
    });
};
ListGrid(无需修改)
var AnimalsGrid = isc.ListGrid.create({
    autoFetchData: false, 
    dataSource: dataAnimNames,
    width: "80%",
});

验证步骤

  1. 在浏览器开发者工具的网络面板中,查看ShowAnimalsList.aspx的返回XML,确认结构为:
    <NewDataSet>
      <DATA>
        <AnimalName>Mickey</AnimalName>
        <Desc>Mouse</Desc>
      </DATA>
      <DATA>
        <AnimalName>Goofy</AnimalName>
        <Desc>Dog</Desc>
      </DATA>
    </NewDataSet>
    
  2. 确认请求参数Names已正确传递到后端。

内容的提问来源于stack exchange,提问作者Gerald Hendrix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:30:31