asp.net-mvc - ASP.NET MVC - 处理没有返回对象的 ajax 操作的正确方法

标签 asp.net-mvc jquery

我有一个 Controller 操作,它在数据库中执行一些工作,然后在完成后退出。此操作通过 jQuery 的 ajax 函数调用,数据类型设置为“json”。

如果我将操作的返回类型设置为 void,则一切都会正常运行,除了 Firefox 会在控制台中显示错误:“未找到元素”。

如果 Firefox 期望 XML 返回,那么它会抛出此错误,这是有道理的。但是,即使我将 ajax 调用的 dataType 属性更改为“text”,我仍然收到错误。为了消除返回类型 void 的错误,我必须将响应的 ContentType 设置为“text/html”。或者我可以将返回类型设置为 JsonResult 并返回一个新的 [空] JsonResult 对象。

我确信有多种方法可以消除此错误,但我想知道处理通过 ajax 调用的无返回值的操作的正确方法。

如果重要的话,我还使用异步 Controller 操作模式。

public void DoSomethingAsync(SomeJsonObjectForModelBinding model)
{
    // do some database things
}

public void DoSomethingCompleted()
{
    // nothing to do...
    // what should my return type be?
    // do I need to set the content type here?
}

最佳答案

我知道这并不能完全回答你的问题,但我认为你应该始终有一个从 AJAX 或 Web 服务调用返回的返回值。即使只是告诉您操作成功,或者以其他方式将错误(消息)返回给您。

我经常定义这样的类:

public class JsonResultData
{
    private bool _success = true;
    public bool Success
    {
        get { return _success; }
        set { _success = value; }
    }

    public object Value { get; set; }
    public List<string> Errors { get; set; }


    public JsonResultData()
    {
        this.Errors = new List<string>();
    }
}

然后使用它在 JsonResultData 包装器中返回数据或任何其他调用元数据,如下所示:

return new JsonResult {
            Data = new JsonResultData { Value = returnValue, Success = true }
           };

关于asp.net-mvc - ASP.NET MVC - 处理没有返回对象的 ajax 操作的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5463262/

相关文章:

javascript - 使用 AJAX 和 jQuery 完成表单输入

javascript - 按键jquery上的表单验证

javascript - 如何从 Razor 部分引用 javascript 变量?

c# - Active Directory 登录后,ASP.NET MVC 应用程序重定向到本地主机而不是应用程序 URI

javascript - AngularJS从 Controller 注入(inject)部分 View

asp.net-mvc - 如何将模型值从 View 传递到 Controller ?

asp.net-mvc - 如何根据区域将未经授权的用户重定向到登录页面?

javascript - 重新加载后,iframe 中的 OnLoad 事件不会在 IE8 中触发

javascript - 如何从 CSS 类属性创建变量?

php - 如何在超链接 codeigniter 中应用类 "active"