由于存在js版本的兼容性,而在vs里面如果没有通过Nuget更新jquery.unobtrusive-ajax.js版本的话,那jquery版本就应该仅限定于1.7-1.8之间,如果引用2.1的话,那么微软自己封装的一套Ajax就不能用了,所以,大家在使用Ajax.BeginForm的时候,如果遇到一些问题,不妨尝试下降低下jquery的版本,或许你的问题就会迎刃而解;
一:jquery.unobtrusive-ajax.js与MicrosoftAjax.js、MicrosoftMvcAjax.js的区别
在MVC 1,2版本中,他们使用自己的Ajax类库来实现ajax请求,相应的js文件为MicrosoftAjax.js,MicrosoftMvcAjax.js
但是程序员更喜欢jQuery,“write less, do more ”,而微软意识到这一点,软后就慢慢接受jquery ,然后就有了jquery.unobtrusive-ajax.js;
要使MicrosoftAjax.js、MicrosoftMvcAjax.js能正常使用的话,必须要在在web.config中增加client side validation and unobtrusive javascript 两个配置
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
,只有在这个时候,之前的Ajax.BeginForm查询到后台函数才能按照你的意愿来。
可是如果您想要用jquery.unobtrusive-ajax.js(更加轻便),可以直接将true设置为false,或者将这两个配置给删掉。
上面引用两种不同js文件的时候,都要注意一下js版本的问题,因为微软出了这两套js文件还是很早了,特别是MicrosoftAjax.js、MicrosoftMvcAjax.js这两个js文件,如果一直不行就一直降低js版本,一直到得行就可以了!
二:Content与JavaScript的区别
Content是返回一个字符串,然后到前台中会自动解析成一段HtmlString。
而JavaScript是返回一个js代码,然后在前台中会自动插入到js脚本中去执行。可是JavaScript能做的,Content都能做,只需将Content中的字符串改变一下就可以了,如:
return JavaScript("alert(‘哈哈!‘)");
return Content("<script type=‘text/javascript‘>alert(‘哈哈!‘);</script>")
上面两种效果是一样的!
所以大家适当考虑下自己编码适当的风格;
接下来请允许我盗一张图来解释下其中的关系