我开始学习ASP.Net MVC(候选版本),我遇到了一些麻烦。我可能只是挑剔,但我想我会问。
我想使用内置(扩展)ASP.Net Ajax方法来调用我的控制器,称为“GetNames”,它返回一个JsonResult对象。我见过使用$ .getJSON()jQuery方法的示例,但我更喜欢这样做:
<%using ( Ajax.BeginForm("GetNames", new AjaxOptions() { OnSuccess = "GetNamesSuccess", OnBegin = "GetNamesBegin", OnComplete = "GetNamesComplte", OnFailure = "GetNamesFailure" } ) ) { %>
<%=Html.TextBox("DummyData") %>
<input type=submit />
<% } %>
<script type="text/javascript">
function GetNamesSuccess()
{
alert("Success");
}
function GetNamesBegin()
{
alert("Begin");
}
function GetNamesComplete()
{
alert("Complete");
}
function GetNamesFailure()
{
alert("Failure");
}
</script>
当我单击“提交”按钮时,我没有收到任何警报,并且系统提示我下载包含Json对象文本的文件,我相信这表明至少控制器方法工作正常。但这对我来说不是预期的行为......理想情况下,Ajax.BeginForm会将其设置为Json对象将传递给OnSuccess或OnComplete方法。
有没有办法实现这个目标?
答案 0 :(得分:4)
您是否在视图页面中包含了MicrosoftAjax.js和MicrosoftMvcAjax.js javascript文件?听起来我觉得它实际上是在发布表单而不是使用Ajax。我错过了MicrosoftAjax.js包含这个问题因为Ajax回发因为缺少javascript类而失败,因此它调用了正常的表单帖子。
在相关的说明中,您应该在控制器中检查请求是否是Ajax,如果不是,则返回ViewResult(或Redirect)而不是Json。如果有人关闭了javascript或者你的页面上有错误,你希望它优雅地降级并将其作为正常的回发处理而不是返回Json。