ブラウザーが異なるとサーバー コードの機能が異なる理由はよくわかりませんが、IE では が表示されますがInvalidOperationException
、Chrome と Firefox では完全に機能します。
内部のコードHomeController
(Facebook タブ アプリケーションの場合、クライアントの名前を難読化するために一部の型の名前が変更されています) は次のとおりです。
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult Index()
{
Nullable<long> facebookUserID = GetFacebookIDOrRedirect();
Start start = new Start();
start.FacebookUserID = facebookUserID;
// More properties are set here...
if (MyUser == null)
{
CurrentMyUser = new MyUser
{
UserID = Guid.NewGuid(),
FacebookUserID = facebookUserID,
Answers = new Dictionary<int, Answer>()
};
}
else { start.SomeProperty = MyUser.SomeProperty; }
ViewData.Model = start;
// Some things are added to the ViewBag here.
return View();
}
これで、Chrome と Firefox は正しく次の方法に進みます。
[HttpPost]
public ActionResult Start(Start model)
{
if (ModelState.IsValid)
{
if (CurrentMyUser == null) return View();
MyUser myUser = (MyUser) Session["MyUser"];
myUser.SomeProperty = model.SomeProperty;
// More properties are set here...
return RedirectToAction("Question", "MyController", new { id = 1 });
}
return View();
}
の URL でhttp://domain.com/MyController/Question/1
。ただし、同じ状況で、IEはアクセスしようとしていますhttp://domain.com/Home/Start
を見てみると、;Global.asax.cs
についての言及はありません。呼び出される必要があるルートと同様Start
に、唯一の言及は以下のとおりです。HomeController
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
// Parameter defaults
);
routes.MapRoute(
"FeedingTimes", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "FeedingTimes", action = "Question", id = 1 }
// Parameter defaults
);
Fwiw、動作しているブラウザのバージョンは最新の Chrome (19.0.1084.46 m) で、Internet Explorer 9.0.8112.16421 では失敗しています。私たちの QA 担当者は、Firefox では問題なく動作していると言っています。彼らが使用している IE のバージョンはわかりませんが、すでにランチに行っているので、尋ねることはできません。
これは、 Internet Explorer 7 + MVC 3 = 不正な URLと同じ問題ではないようです。または、MVC、IMG タグ、Url.Action、および TempData を使用した IE9 の予期しない動作として— Fiddler を見ると、1 つの要求しか得られません: POST /Home/Start HTTP/1.1
(表示されると予想される POSTdata を使用)。しかし、IE が別の方法でそれを行う理由がわかりません (または、サーバー コードがブラウザのバージョンを認識する理由さえあります!)。
どんなアイデアもありがたく受け取った。