我有一个 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/