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

vermilion3618 2013-11-16 04:11:53
先说说配置:
服务器: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这种牛逼的浏览器

通过Console查看一下这个Ajax.BeginForm生成的form表单中action的提交地址。Chrome一切正常


再来看看蛋疼的IE浏览器

奇葩了啊~~~为什么 写的Ajax.BeginForm("Register") 设置的是Register这个Action
而最终在IE中拿到的form.action却没有了Register....

继续往后看
现在把IE内核调整到IE7模式

空的,在IE7模式下action居然是空的,但提交却又能成功,仔细调试了一下,发现是jQuery帮了个忙
看图:

原来jQuery在判断到$.ajax的url为空字符串或未定义时,会自动为url设置成当前页面的地址
而我这里刚好提交的地址又和页面地址相同的,所以产生了一个巧合性的成功。。。。

大神们,问题您看明白了吗?? 这奇葩的IE 在搞什么呀。。。难道是MVC4的问题??? 该怎么去解决~~!~!~!

经过测试,发现 如果把项目部署到IIS7及以上的版本,就不存在这些问题。

求解决方案,拜托了 各位大神们~~
...全文
554 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
vermilion3618 2013-12-12
  • 打赏
  • 举报
回复
引用 18 楼 L_5igirl 的回复:
ajax提交怎么还有form表单啊,没有form都可以提交,你这个好像真不是!
我说了 使用了jquery.unobtrusive-ajax.js这个东西 它会在form表单标识了Ajax的情况下为这个form表单绑定一个submit事件 并且这个事件直接return false以阻止表单提交,然后去遍历搜索这个form表单中的所有控件,再通过调用jQuery.validate插件进行数据验证 通过后取出这些控件的name属性值和value属性值 生成一个json对象,然后执行ajax 你明白吗??? 在MVC4中本身就使用了这个机制 就是@using(Ajax.BeginForm()) MVC4 + jQuery.validate + jquery.unobtrusive-ajax + EntityFramework 可以做到更改实体特性来对控件进行验证 相当快捷方便
L_5igirl 2013-12-04
  • 打赏
  • 举报
回复
引用 17 楼 vermilion3618 的回复:
[quote=引用 14 楼 L_5igirl 的回复:] 用ajax提交表单吧,应该没啥问题的
这个本身就是ajax提交 只是采用的jquery.unobtrusive-ajax.js进行ajax操作的[/quote] ajax提交怎么还有form表单啊,没有form都可以提交,你这个好像真不是!
L_5igirl 2013-12-03
  • 打赏
  • 举报
回复
用ajax提交表单吧,应该没啥问题的
vermilion3618 2013-12-03
  • 打赏
  • 举报
回复
引用 14 楼 L_5igirl 的回复:
用ajax提交表单吧,应该没啥问题的
这个本身就是ajax提交 只是采用的jquery.unobtrusive-ajax.js进行ajax操作的
vermilion3618 2013-12-03
  • 打赏
  • 举报
回复
引用 15 楼 ktei2008 的回复:
所以说别用asp.net……你看看这些问题
哎 没办法 现在用最直接二的办法弄的 写了一个js函数 让这个函数在第个具有ajax.beginform的页面中调用这个js函数 来手动设置form表单的action属性值
ktei2008 2013-12-03
  • 打赏
  • 举报
回复
所以说别用asp.net……你看看这些问题
vermilion3618 2013-12-02
  • 打赏
  • 举报
回复
引用 12 楼 lifeilin6671 的回复:
我用MVC4开发了几个百万的项目了,从来没出现你所说的问题。
大哥,您可以仔细看一下我说的问题吗?? 是IIS6+MVC4 如果在IIS7上 我还来这说啥呢???
  • 打赏
  • 举报
回复
引用 11 楼 vermilion3618 的回复:
[quote=引用 10 楼 lifeilin6671 的回复:] 根本就没生成表单的action属性。 当然会出错。
也哪 我只能说 你没用过MVC的 另外 action并不是我写上去的 就连整个form表单都是由MVC去生成的,看我上面写的cshtml代码你应该清楚,整个生成表单的方式是@Ajax.BeginForm()来生成的,而action会通过隐藏的方式传递给浏览器。 但可以通过js来获取到这个action 仔细看下我的分析图片 我的所有获取方式都是通过控制台编写js代码来输出action值的。 而目前状况 ie8及以上版本 获取到的action是没有Action的 而在IE7及以下版本连action都没有 这里说的action(小写a)是说form表单的action属性 而我说的Action(大写A)是说MVC中Controller中的Action 不知道你能看懂吗?[/quote] 我用MVC4开发了几个百万的项目了,从来没出现你所说的问题。
vermilion3618 2013-11-19
  • 打赏
  • 举报
回复
引用 10 楼 lifeilin6671 的回复:
根本就没生成表单的action属性。 当然会出错。
也哪 我只能说 你没用过MVC的 另外 action并不是我写上去的 就连整个form表单都是由MVC去生成的,看我上面写的cshtml代码你应该清楚,整个生成表单的方式是@Ajax.BeginForm()来生成的,而action会通过隐藏的方式传递给浏览器。 但可以通过js来获取到这个action 仔细看下我的分析图片 我的所有获取方式都是通过控制台编写js代码来输出action值的。 而目前状况 ie8及以上版本 获取到的action是没有Action的 而在IE7及以下版本连action都没有 这里说的action(小写a)是说form表单的action属性 而我说的Action(大写A)是说MVC中Controller中的Action 不知道你能看懂吗?
  • 打赏
  • 举报
回复

根本就没生成表单的action属性。
当然会出错。
vermilion3618 2013-11-19
  • 打赏
  • 举报
回复
引用 8 楼 lifeilin6671 的回复:
贴出来你用IE浏览的时候的源码看看!
源码贴不上来 字太多了 http://www.cdhlwl.com:81/Home/Register 这个是测试地址帮忙看一下 谢谢了~~
  • 打赏
  • 举报
回复
贴出来你用IE浏览的时候的源码看看!
vermilion3618 2013-11-18
  • 打赏
  • 举报
回复
引用 6 楼 du9232 的回复:
iis6 没问题
那又是什么问题呢? 应该怎么解决 帮帮忙 谢谢了~~
du9232 2013-11-16
  • 打赏
  • 举报
回复
iis6 没问题
vermilion3618 2013-11-16
  • 打赏
  • 举报
回复
引用 4 楼 cears 的回复:
个人觉得是IIS6.0 与mvc4.0路由之间的冲突问题。因为 通常在IIS6下部署ASP.NET MVC应用程序的时候,都是直接设置把所有请求都交由ASP.NET的ISAPI处理。MVC是基于ASP.NET的,框架默认对于任何请求都会优先检查物理路径是否存在物理文件,如果存在的话就不通过MVC的路由机制,否则才走路由。
这个 好像和我说的问题没有什么关系吧?? 这些我都知道 在配置站点的时候 取消了勾选“确定文件是否存在”选项的
M依然 2013-11-16
  • 打赏
  • 举报
回复
个人觉得是IIS6.0 与mvc4.0路由之间的冲突问题。因为 通常在IIS6下部署ASP.NET MVC应用程序的时候,都是直接设置把所有请求都交由ASP.NET的ISAPI处理。MVC是基于ASP.NET的,框架默认对于任何请求都会优先检查物理路径是否存在物理文件,如果存在的话就不通过MVC的路由机制,否则才走路由。
vermilion3618 2013-11-16
  • 打赏
  • 举报
回复
引用 1 楼 zhuankeshumo 的回复:
mvc4还搭到iis6上面? 好像最低是iis7吧!换个server 2008或2012就行了 我在用2012
我也想换2008 还想换2012呢 但客户的服务器是server2003啊 我说啥都没用啊 2008比2003贵得多啊。。。
newtee 2013-11-16
  • 打赏
  • 举报
回复
你谷歌下asp.net mvc 4 +iis6吧! PS:还是换服务器吧 不然不知道以后还会不会出现什么其他问题
newtee 2013-11-16
  • 打赏
  • 举报
回复
mvc4还搭到iis6上面? 好像最低是iis7吧!换个server 2008或2012就行了 我在用2012

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧