0

我想知道是否有人能指出我正确的方向.....我刚开始使用 JSON 和 c# 并按照教程(有一些技巧)将一些数据返回到网页。我目前拥有的是这个(缩写)。

具有调用存储过程的 Web 服务的 asp.net 解决方案:

    [WebMethod]
    public string ReadRegion()
    {
        DataSet myDS = getInterests();
        StringBuilder sb = new StringBuilder();
        DataTable myVenues = myDS.Tables[0];
        if (myVenues.Rows.Count > 0)
        {
            foreach (DataRow myVenueRow in myVenues.Rows)
            {
                sb.Append(myVenueRow["descript"].ToString().TrimEnd() + "<br/>");
            }
        }
        else
        {
            sb.Append("No Records Found");
        }
        return sb.ToString();
    }

在此解决方案中,我还有一个 aspx 页面,其中包含以下内容:

<script type = "text/javascript">
    function ShowRegionsInfo() {
        var pageUrl = '<%=ResolveUrl("~/WebService/wsJQueryDBCall.asmx")%>'

        $.ajax({
            type: "POST",
            url: pageUrl + "/ReadRegion",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: OnSuccessCall,
            error: OnErrorCall
        });
    }

    function OnSuccessCall(response) {
        $('#<%=lblOutput.ClientID%>').html(response.d);
    }

    function OnErrorCall(response) {
        alert(response.status + " " + response.statusText);
    }
</script>

该代码正在工作,因为我在页面上获得了描述(离子)列表。但展望未来,我想在返回的记录集中包含一系列行,最终我希望能够从客户端动态过滤结果。

所以我的问题是我是不是一开始就走错了路。我是否以正确的格式将数据返回到页面。因为所有其他 json 示例,老实说,看起来与我的不同!如果我走错了路,谁能给我一些建议,告诉我应该采取什么步骤。

感谢您给我的任何建议!

克雷格

4

2 回答 2

0

在你的 ajax 选项中设置dataType: "json"告诉 jQuery 你期待来自服务器的 JSON 响应。您只是从服务器返回 html(这是默认设置),因此请删除该行。

此外,在您的OnSuccessCall()方法中,您可以更改response.dresponse.

<script type = "text/javascript">
    function ShowRegionsInfo() {
        var pageUrl = '<%=ResolveUrl("~/WebService/wsJQueryDBCall.asmx")%>'

        $.ajax({
            type: "POST",
            url: pageUrl + "/ReadRegion",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            success: OnSuccessCall,
            error: OnErrorCall
        });
    }

    function OnSuccessCall(response) {
        $('#<%=lblOutput.ClientID%>').html(response);
    }

    function OnErrorCall(response) {
        alert(response.status + " " + response.statusText);
    }
</script>
于 2013-05-03T14:39:04.683 回答
0

如果您从aspx.cs 文件中调用特定方法

aspx页面中使用以下脚本

$('#<%= ddlItemCatogory.ClientID%>').change(function () {
            var catId = this.value;
            $('#<%= ddlItem.ClientID%>').get(0).options[0] = new Option("loading ... ", "0");
            $("#phMainContent_ctl00_ddlItem").resetSS();
            $.ajax({
                type: "POST",
                url: "handler/PopulateAjaxData.aspx/GetItem",
                data: "{'catId':'" + catId.toString() + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: 'json',
                success: function (data) {
                    if (data.d.length > 0) {
                        $('#<%= ddlItem.ClientID%>').get(0).options.length = 0;
                        $('#<%= ddlItem.ClientID%>').get(0).options[0] = new Option("Select Item", "0");
                        $.each(data.d, function (index, item) {
                            $('#<%= ddlItem.ClientID%>').get(0).options[$('#<%= ddlItem.ClientID%>').get(0).options.length] = new Option(item.Display, item.Value);
                        });
                    }
                    else {
                        $('#<%= ddlItem.ClientID%>').get(0).options.length = 0;
                        $('#<%= ddlItem.ClientID%>').get(0).options[0] = new Option("No Item found", "0");
                    }
                    $("#phMainContent_ctl00_ddlItem").resetSS();
                },
                error: function () {
                    alert("Failed to load Item");
                }
            });
        });

PopulateAjaxData.aspx.cs中的代码是

    [WebMethod]
    public static ArrayList GetItem(string catId)
    {
        ArrayList list = new ArrayList();
        PopulateAjaxData item = new PopulateAjaxData();
        List<DataModels.Items> items = item.loadItem(int.Parse(catId));

        foreach (DataModels.Items i in items)
        {
            list.Add(new { Value = i.Id.ToString(), Display = i.Name });
        }

        return list;
    }

如果您调用aspx.cs文件,则使用以下代码...

在 .aspx 页面中使用以下代码

  function addToCart() {
        var vehicleId = $('#<%= VehicleId.ClientID%>').val();
        var parameter = "vehicleId=" + vehicleId;

        $.ajax({
            type: "POST",
            url: "handler/AddToCart.aspx?" + parameter,
            success: function (msg) {

                if (msg == "1") {
                    $('#message').html('Vehicle has been added to Cart.');
                }
                else {
                    $('#message').html('Vehicle can not be added at this moment.');
                }
            }
        });
    }

aspx.cs加载事件使用下面的代码

protected void Page_Load(object sender, EventArgs e)
{
    string vehicleId = Request.Params["vehicleId"] ?? "";
    string productId = Request.Params["productId"] ?? "";
    string message = string.Empty;
    int CartId = 0;


    if (Request.Cookies["CartId"] == null)
    {
        if (CartId == 0)
        {
           DataModels.Cart cart = new DataModels.Cart();
           cart.CreatedAt = DateTime.Now;

            try
            {
                cart = Service.Create(cart);
                if (cart.Id > 0)
                {
                    HttpCookie objCookie = new HttpCookie("CartId");
                    objCookie.Value = cart.Id.ToString();
                    objCookie.Expires = DateTime.Now.AddDays(1);
                    Response.Cookies.Add(objCookie);
                    CartId = cart.Id;
                }
            }
            catch (Exception ex)
            {
                message = ex.Message;
                Response.Write("-1");
            }
        }
    }
    else
    {
        CartId = int.Parse(Request.Cookies["CartId"].Value);
    }

    DataModels.CartItem cv_new = new DataModels.CartItem();
    if (CartId > 0 && !(string.IsNullOrEmpty(vehicleId)))
    {
        DataModels.CartItem cv = Service.ReadCartByVehicleId(CartId, int.Parse(vehicleId));

        if (cv == null)
        {
            cv_new.Cart = Service.ReadCart(CartId);
            cv_new.Vehicle = Service.ReadVehicle(int.Parse(vehicleId));
            cv_new.Product = null;
            cv_new = Service.Create(cv_new);
        }
    }
    else if (CartId > 0 && !(string.IsNullOrEmpty(productId)))
    {
        DataModels.CartItem cv = Service.ReadCartByProductId(CartId, int.Parse(productId));

        if (cv == null)
        {
            cv_new.Cart = Service.ReadCart(CartId);
            cv_new.Vehicle = null;
            cv_new.Product = Service.ReadProduct(int.Parse(productId));
            cv_new = Service.Create(cv_new);
        }
    }


    Response.Write("1");
}
于 2013-05-03T16:50:32.647 回答