如何在OnFailure函数中显示ViewBag?

时间:2014-03-06 14:31:41

标签: ajax asp.net-mvc-3

我使用了带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”);它运作正常。

有什么问题?

1 个答案:

答案 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"