簡體   English   中英

Web方法無法在FlexiGrid中觸發

[英]Webmethod not firing in FlexiGrid

我在項目中使用的是FlexiGid,但問題是WebMethod無法啟動。

我在這里放了代碼

阿賈克斯電話

  function flexgrid() {
        debugger;
        $("#flex1").flexigrid({

                    url: '/WebMethods.aspx/GetIssueSummaryById',
                    dataType: 'json',
                    contentType: "application/json; charset=utf-8",
                    colModel : [
                        {display: 'ID', name : 'id', width : 40, sortable : true, align: 'center'},



                    ],
                    data: JSON.stringify({ ProjectId: "1", UserId: "1" }), //Hard code this values at this time
                    buttons : [
                        { name: 'Add', bclass: 'add', onpress: test },
                        { name: 'Delete', bclass: 'delete', onpress: test },
                        {separator: true},
                        {name: 'A', onpress: sortAlpha},
                        {name: 'B', onpress: sortAlpha}


                    ],
                    searchitems : [
                        { display: 'Project', name: 'project' },
                        {display: 'Name', name : 'name', isdefault: true}
                    ],
                    sortname: "id",
                    sortorder: "asc",
                    usepager: true,
                    title: 'Issue Summary',
                    useRp: true,
                    rp: 10,
                    showTableToggleBtn: true,
                    width: 1000,
                    height: 500
                });

    };

Web方法(位於WebMethods.aspx文件中)

 [WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static List<IssuesVM> GetIssueSummaryById(string UserId, string ProjectId)
{
    //Guid LoggedInUserId = new Guid(UserId);
    //int ProjectId = Convert.ToInt32(ProjectId);

    List<IssuesVM> lst = new List<IssuesVM>();

    try
    {
        SqlCommand comIssueSummary = new SqlCommand("SP_GetIssuesByProjectIDAndOwnerId", conn);
        comIssueSummary.CommandType = CommandType.StoredProcedure;
        //comIssueSummary.Parameters.Add("@ProjectId", SqlDbType.Int).Value = ProjectId;
       // comIssueSummary.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier).Value = LoggedInUserId;
        if (conn.State == ConnectionState.Closed)
            conn.Open();

        SqlDataReader rdr = comIssueSummary.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Load(rdr);
        foreach (DataRow r in dt.Rows)
        {
           //Some code goes here
        }

    }
    catch (Exception)
    {

        throw;
    }

    return lst;
}

之后,Firebug 在此處顯示此圖像

誰能知道這個錯誤? 不觸發webmethod嗎?

PS-我在下面的文章[Click Here]中看到了一些解決方案,我對flexigrid.js文件進行了處理,但它也無法正常工作。

這是Change FlexiGrid.js文件(在change之前)

    $.ajax({
                type: p.method,
                url: p.url,
                data: param,
                dataType: p.dataType,
                success: function (data) {
                    g.addData(data);
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    try {
                        if (p.onError) p.onError(XMLHttpRequest, textStatus, errorThrown);
                    } catch (e) {}
                }
            });
        },

FlexiGrid.js(更改后)

 $.ajax({
                    contentType: "application/json; charset=utf-8",
  data: "{}", // to pass the parameters to WebMethod see below 
                    success: function (data) {
                        g.addData(data);
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        try {
                            if (p.onError) p.onError(XMLHttpRequest, textStatus, errorThrown);
                        } catch (e) {}
                    }
                });
            },

因此,首先,將其移至WebService.asmx文件可能是一個好主意。 這樣做是最佳和常見的做法。 .ASPX頁面通常以HTML / CSS / Javascript響應,.asmx頁面以JSON或XML響應。

無論哪種方式,無論是對flexigrid的Ajax調用是針對WebService還是Web Forms頁面,在添加屬性[WebMethod]以公開執行第一個Ajax調用的方法時,都可能會有些挑戰。 關於對公共WebMethods的Ajax調用有些挑剔。 挑剔出現在請求的內容類型周圍,並且如果請求是JSON或XML,並且響應是JSON或XML。

因此,我將向您展示我所了解的適用於Flexigrid的項目的工作原理:

 $('#gridTablegSearchProperty').flexigrid({
        url: 'Services/WSgSearch.asmx/gridTablegSearchProperty',
        colModel: [...

您會在第一個代碼片段中注意到,我沒有設置Flexigrid的contentType或dataType屬性。

現在我的WebMethod簽名

 [WebMethod]
    public XmlDocument gridTablegSearchProperty()
    {
        System.Collections.Specialized.NameValueCollection nvc = HttpContext.Current.Request.Form;

        int pgNum = nvc.GetValueAsInteger("page").GetValueOrDefault(1);
        int pgSize = nvc.GetValueAsInteger("rp").GetValueOrDefault(20);
        string sortName = nvc.GetValueOrDefaultAsString("sortname", "key");
        string sortOrder = nvc.GetValueOrDefaultAsString("sortorder", "desc");

        string query = nvc.GetValueOrDefaultAsString("query", string.Empty);
        string qtype = nvc.GetValueOrDefaultAsString("qtype", string.Empty);

我的WebMethod位於.asmx文件中,如果您將代碼保留在文件后面也沒關系,但是我將移至WebService並將WebMethods.aspx刪除,這是不良的命名約定和文件使用約定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM