我使用了带OnFailure功能的Ajax.BeginForm。但我无法使用我之前在控制器中设置的错误来显示文本。
控制器
if(error==3) {
ViewBag.Errore="You have to ...";
throw new Exception("You have to ...";
}
查看
<div id="error"></div>
@using (Ajax.BeginForm...., new AjaxOptions() {
....
....
OnFailure="OnFailure"
}
....
<script type="text/javascript">
function Onfailure() {
$("#error").text('@ViewBag.Errore');
}
</script>
如果我使用$(“#error”)。text(“error”);它运作正常。
有什么问题?
答案 0 :(得分:0)
此代码仅在该场景中运行一次:
@ViewBag.Errore
它是在页面加载时解释的,然后再也不会(直到页面再次加载,基本上)。因此,任何AJAX交互都不会更新该服务器端值以重新解释它以用于客户端输出。 AJAX是通过JavaScript异步运行的,因此您将不得不使用JavaScript代码而不是Razor代码来获取错误。
如果我没记错的话,OnFailure
会将一个参数传递给它调用的JavaScript函数。所以你可以从那个论点中获取信息。像这样:
function Onfailure(errorContext) {
$("#error").text('The request failed with status code: ' + errorContext.get_statusCode());
}
关于errorContext
中的请求/响应可能有很多有用的数据,我没有方便的参考。但是值得在JavaScript调试器中放置一个断点并查看它包含的其他内容。例如,如果AJAX响应主体包含错误消息,您可能会执行以下操作:
function Onfailure(errorContext) {
$("#error").text(errorContext.get_response());
}
另外值得注意的是,我认为区分大小写非常重要。因此,您可能希望将该功能重命名为OnFailure
,或将您设置的BeginForm
属性更改为OnFailure="Onfailure"
。