【问题标题】:Ajax Error Handling C#Ajax 错误处理 C#
【发布时间】:2013-08-29 16:19:15
【问题描述】:

我有一个用于封装一些功能的 aspx 页面。这些函数在页面加载时调用,并由通过 jQuery 添加到 POST 请求的字符串变量选择。

我的问题是,如果 POST 请求由于某种原因不包含所需的 ID 号等,我该如何返回错误代码。

同样,我想知道我这样做是否正确(我有一个需要能够从列表中添加和删除 ID 的表单,我通过从这个页面操作会话来做到这一点我是从 jQuery 打来的)。

到目前为止我所拥有的:

调用页面:

    function addItem(code) {
        $("#SubtypeTextbox").load(
            "../../src/ajax/Subtype.aspx",
            {
                Action: "Add",
                SID: code
            }
        );
    }

以及被调用页面的aspx.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Scripts_ajax_Subtype : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Form["Action"] == null)
        {
            Response.Clear();
            Response.StatusCode = 409;
            Response.TrySkipIisCustomErrors = true;
            Response.Write("<p class=\"Errors\">Action is required.</p>");
        }
        else if (Request.Form["SID"] == null)
        {
            Response.Clear();
            Response.StatusCode = 409;
            Response.TrySkipIisCustomErrors = true;
            Response.Write("<p class=\"Errors\">Subtype ID is required.</p>");
        }
        else
        {
            //Execute request
        }
    }
}

【问题讨论】:

  • 为什么要使用 AJAX 调用来调用 .aspx 页面的 Page_Load?那不是破坏了 AJAX 调用的目的吗?如果您想要回发,那么只需在您的页面中使用服务器控件来进行回发(即AutoPostBack="True")。
  • 对不起,不,我不想让我回发,我希望页面保持静态,并调用这个其他页面来影响原始数据,如果这有任何意义的话。

标签: c# asp.net http-post httpresponse http-error


【解决方案1】:

我建议您研究 ASP.NET AJAX 页面方法。它们本质上是托管在 ASP.NET 页面内的 Web 服务,如下所示:

[WebMethod]
public static string GetDate()
{
    return DateTime.Now.ToString();
}

现在您可以通过 jQuery 调用页面方法,如下所示:

$.ajax({
    type: "POST",
    url: "YourPage.aspx/GetDate",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        // Do something interesting here.
    }
});

注意:ASP.NET AJAX 页面方法必须是静态的,并且没有Page 类的实例,但如果您正确地装饰页面方法,它们就无法访问HttpContext.Current.Session 对象。

最后,ASP.NET AJAX 页面方法对其响应进行 JSON 编码,因此您不会在页面方法中看到任何序列化代码,因为它是自动完成的。

【讨论】:

  • 如果我将 [WebMethod(EnableSession = true)] 添加到方法中,这将允许我修改会话变量吗?如果是这样,我该如何修改页面上的 HTML?
  • 是的,EnableSession = true 将允许您在 Session 缓存中存储和检索值。您需要修改 jQuery .ajax() 方法的 success 回调中的 HTML。
  • @Jack - 您可以将页面方法的返回类型设为string,并将您想要在页面上load 的整个 HTML 放入其中,它将被编码为 JSON,但是在 AJAX 成功之后,您可以使用 .html(data.d) 将 HTML 推送到 DOM 元素中。注意:ASP.NET AJAX 3.5 库在返回的 JSON 中添加了 .d,因此您需要考虑这一点。这是与.d issue and how to code around it 交谈的博客条目。
猜你喜欢
  • 2013-06-26
  • 2013-05-19
  • 2012-02-25
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
相关资源
最近更新 更多