none
IIS6+MVC4+IE浏览器,又出问题了,求大神帮忙解决啊 RRS feed

  • 问题

  • 先说说配置:
    服务器: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     帮帮忙,谢谢了

    • 已编辑 Lession Levy 2013年11月16日 11:02 补全内容
    2013年11月16日 10:57

全部回复