Ajax 如何在OnFailure函数中可视化ViewBag?

Ajax 如何在OnFailure函数中可视化ViewBag?,ajax,asp.net-mvc-3,Ajax,Asp.net Mvc 3,我使用了一个带有OnFailure函数的Ajax.BeginForm。但是我无法想象我之前在控制器中设置了错误的文本 控制器 if(error==3) { ViewBag.Errore="You have to ..."; throw new Exception("You have to ..."; } 看法 @使用(Ajax.beginnform….,新的AjaxOptions(){ .... .... OnFailure=“OnFailure” } .... 函数Onfailure(

我使用了一个带有OnFailure函数的Ajax.BeginForm。但是我无法想象我之前在控制器中设置了错误的文本

控制器

if(error==3) {
 ViewBag.Errore="You have to ...";
 throw new Exception("You have to ...";
}
看法


@使用(Ajax.beginnform….,新的AjaxOptions(){
....
....
OnFailure=“OnFailure”
}
....
函数Onfailure(){
$(“#error”).text(“@ViewBag.error”);
}
如果我使用$(“#error”).text(“error”);它会正常工作

问题是什么?

此代码在该场景中只运行一次:

@ViewBag.Errore
在加载页面时会对其进行解释,然后再也不会进行解释(基本上直到再次加载页面)。因此,任何AJAX交互都不会更新该服务器端值以重新解释它以用于客户端输出。AJAX是通过JavaScript异步运行的,因此您必须使用JavaScript代码而不是Razor代码来获取错误

如果我没记错的话,
OnFailure
将一个参数传递给它调用的JavaScript函数。因此,您可以从该参数中获取信息。类似如下:

function Onfailure(errorContext) {
    $("#error").text('The request failed with status code: ' + errorContext.get_statusCode());
}
function Onfailure(errorContext) {
    $("#error").text(errorContext.get_response());
}
errorContext
中可能有很多关于请求/响应的有用数据,我手头没有相关的参考资料。但是值得在JavaScript调试器中设置一个断点,看看它还包含哪些内容。例如,如果AJAX响应体包含错误消息,您可以执行类似以下操作:是:

function Onfailure(errorContext) {
    $("#error").text('The request failed with status code: ' + errorContext.get_statusCode());
}
function Onfailure(errorContext) {
    $("#error").text(errorContext.get_response());
}

同样值得注意的是,我认为区分大小写很重要。因此,您可能希望将函数重命名为
OnFailure
,或者将设置为
OnFailure=“OnFailure”的
BeginForm
属性更改为
OnFailure=“OnFailure”

嗨,我明白了,但那代码一次都不工作…为什么?get_response不存在!@SanginetoS:这段代码中有什么不起作用?调用函数时是否没有提供
errorContext
?是否解决了区分大小写的问题?浏览器中的JavaScript控制台是否有错误?在我的控制台中是否有错误只有我的异常的错误我看不到其他任何东西。@SanginetoS:你能在浏览器的JavaScript调试器的
OnFailure
函数中放置一个断点,看看它是否被调用过吗?也许用你看到的屏幕截图更新你的问题?对不起,我直到现在才使用带有调试器的控制台。我正在尝试但是我在我的页面(脚本部分)中没有看到该代码,可能是因为我有3个不同的部分页面?我确信该函数被调用,因为如果我打印文本,它会正常工作。