0

webmethod への ajax 呼び出しがありますが、呼び出しは常に失敗します。以下に必要なコードを示します。LetterReportDataStore クラスは、データベースに移動し、データ テーブルにデータを入力して返します。

    $(document).ready(function () {
           BindGridView('eastern');

    });

    function BindGridView(r) {
        $.ajax({
            type: "POST",
            url: "AgencyLetterReport.aspx/GetLetterReportData",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                alert('Success');
                for (var i = 0; i < data.d.length; i++) {
                    $("#grdviewe").append("<tr><td>" + data.d[i].Username +
                                          "</td><td>" + data.d[i].Name + "</td></tr>");
                }
                                },
            error: function () { alert('Failed'); }
        })
    }

    <WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
Public Shared Function GetLetterReportData() As LetterReportData()
    Dim region As String = "eastern"
    Dim list As List(Of LetterReportData) = New List(Of LetterReportData)
    Dim dt As DataTable = LetterReportDataStore.LoadGridData(region)

    For Each r As DataRow In dt.Rows
        Dim _data As LetterReportData = New LetterReportData
        _data.Username = r.Item(0)
        _data.Name = r.Item(1)

        list.Add(_data)
    Next
    Return list.ToArray()
End Function
4

1 に答える 1

0

私はそれを理解しました。Web メソッドを以下に変更しました。データ フィールドの 1 つでいくつかの null 値を取得していたので、.Tostring を使用して空の文字列にしました。List も ArrayList に変更しましたが、List も同様に機能すると思います。問題は、私が信じているヌル値でした。

<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
Public Shared Function GetLetterReportData(ByVal region As String) As ArrayList
    'Dim region As String = "eastern"
    Dim list As ArrayList = New ArrayList
    Dim dt As DataTable = LetterReportDataStore.LoadGridData(region)

    For Each r As DataRow In dt.Rows
        Dim _data As LetterReportData = New LetterReportData
        _data.Username = r.Item(0).ToString
        _data.Name = r.Item(1).ToString

        list.Add(_data)
    Next
    Return list
    'Return region
End Function

これが私のjquery呼び出しです

$(document).ready(function () {
        $("#tabs").tabs();
        BindGridView('eastern');          
    });

    function BindGridView(r) {
        $.ajax({
            type: "POST",
            url: "AgencyLetterReport.aspx/GetLetterReportData",
            data: "{'region' : '" + r + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                //alert(data.d[0].Username);
                for (var i = 0; i < data.d.length; i++) {
                    $("#grdviewe").append("<tr class='GridviewScrollC1Item'><td>" + data.d[i].Username +
                                          "</td><td>" + data.d[i].Name + "</td>" +
                                          "</tr>");
                }
                $('#grdviewe').gridviewScroll({
                    width: $(window).width() - 200,
                    height: $(window).height() - 200
                });
            },
            error: function () { alert('Error on loading data.'); }
        })
    }

.append 呼び出しでこの行に気付いた場合は、class='GridviewScrollC1Item'. gridview列がデータバインドでcssを失い、列がヘッダーと整列しないため、これを追加する必要がありました。グリッドビューは以下のように設定されていましたが。ヘッダー css は残りますが、交互の行スタイルと行スタイルは失われます。現在、行スタイルの変更を修正しようと取り組んでいます。

 <asp:GridView ID="grdviewe" runat="server" Width="100%" ShowHeaderWhenEmpty="True">
     <AlternatingRowStyle BackColor="#EEF2FF" />
     <HeaderStyle CssClass="GridviewScrollC1Header" /> 
     <RowStyle CssClass="GridviewScrollC1Item" />
 </asp:GridView>

これが誰にも役立つことを願っています!

于 2013-03-08T14:26:55.777 に答える