先说说配置:
服务器:Windows Server 2003
平台:IIS6.0
开发环境:ASP.NET MVC4 (VS 2013 RC版本编译)
按招网上的流程完成了MVC4在Windows Server 2003 上的补丁安装和部署。
一切都OK 木有问题了 网站也可以访问了。
上出现问题的源码:
后台控制器代码:
public class HomeController : Controller
{
/// <summary>
/// 注册页面
/// </summary>
/// <returns></returns>
public ActionResult Register()
{
return View();
}
/// <summary>
/// 注册页面的数据提交视图
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
[HttpPost]
public JsonResult Register(RegisterUser user)
{
UserModel um = new UserModel();
return Json(um.RegisterUser(user), JsonRequestBehavior.AllowGet);
}
}
.cshtml文件中的代码
@model HCP.Models.RegisterUser
@using (Ajax.BeginForm("Register", null, new AjaxOptions()
{
OnBegin = "regBegin",
OnSuccess = "regSuccess",
OnComplete = "regComplete"
}, new Dictionary<string, object>()
{
}))
{
<div class="regform">
<div class="ctrlleft"><span>*</span>用户名:</div>
<div class="ctrlcenter">@Html.TextBoxFor(e => e.UserName)</div>
<div class="ctrlright">4-18位字符,允许字母、数字、下划线,不区分大小写</div>
</div>
<div class="regform">
<div class="ctrlleft"><span>*</span>邮箱:</div>
<div class="ctrlcenter">@Html.TextBoxFor(e => e.Email)</div>
<div class="ctrlright">请输入您的常用邮箱,我们将在下一步验证您的邮箱,方便您以后找回密码</div>
</div>
<!--
部分代码省略... 很容易看出来吧,就是一个普通的Ajax.BeginForm表单,
用到了jquery.unobtrusive-ajax.js进行ajax提交数据
-->
}
上面的代码没啥难度吧,好 现在开始说问题
先看看Chrome这种牛逼的浏览器(不能上传图片,只能口述了。。。。)
在chrome中,通过F12进入Console输入$("form")[0].action 获取到 当前的提交action地址是:http://ip:port/Home/Register
一切正常的吧 /controller/action 方式
通过Console查看一下这个Ajax.BeginForm生成的form表单中action的提交地址。Chrome一切正常
再来看看蛋疼的IE浏览器
在ie浏览器中F12设置模式为ie10标准模式,通过控制台监视$("form")[0].action 获取到的提交action地址却变成了http://ip:port/Home 就这样,没了
我的Register不见了。。。
奇葩了啊~~~为什么 写的Ajax.BeginForm("Register") 设置的是Register这个Action
而最终在IE中拿到的form.action却没有了Register....
继续往后看
现在把IE内核调整到IE7模式
在IE7模式下,经过F12监视值发现form表单中的action属性居然是空的,在IE7模式下action居然是空的,但提交却又能成功,仔细调试了一下,发现是jQuery帮了个忙:
原来jQuery在判断到$.ajax的url为空字符串或未定义时,会自动为url设置成当前页面的地址
而我这里刚好post的地址又和页面地址相同的,所以产生了一个巧合性的成功。。。。
大神们,问题您看明白了吗?? 这奇葩的IE 在搞什么呀。。。难道是MVC4的问题??? 该怎么去解决~~!~!~!
经过测试,发现 如果把项目部署到IIS7及以上的版本,就不存在这些问题,但在IIS6中到底是哪里出了问题?
求解决方案,拜托了 各位大神们~~
这个问题我在csdn上提了:那有图片,大神们可以去那看一下 内容一样的:
http://bbs.csdn.net/topics/390644416 帮帮忙,谢谢了