私はすでにMVC3でサイト全体を書いています。JqueryMobileを使用してモバイルバージョンをビルドしようとしています。モバイルページを返すかどうかのチェックを追加する以外は、コントローラーコードを変更していません。モバイルログオンページのドキュメントヘッドに次のものがあります。
<head>
<title>Mobile Logon</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0-alpha.1/jquery.mobile-1.2.0-alpha.1.min.css" />
<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
$(document).bind("mobileinit", function(){
$.extend( $.mobile , {
ajaxEnabled: false
});
});
<script src="http://code.jquery.com/mobile/1.2.0-alpha.1/jquery.mobile-1.2.0-alpha.1.min.js"></script>
</head>
ヘッダーとコンテンツのあるページがあります。コンテンツでは、ユーザーが登録フォームにリダイレクトできるようにしたいと思います。以下はうまくいくようです:
<form action="Register" method="get" data-ajax="false">
<button type="submit" value="Register for an account"></button>
</form>
これは機能しません:(ブラウザではURLは正しいように見えますが、読み込まれるのは空白の白いページだけです)
@using(Html.BeginForm("Register", "Account", FormMethod.Get, null ))
{
<button type="submit" value="Register for an account"></button>
}
ページソースを見ると、2つの違いに気づきます。1つ目はフォームタグに
action="Register"
2番目はフォームタグを与えます
action="Account/Register"
もう1つの違いは、フォームタグの「data-ajax=false」です。
質問:JqueryMobileで@Html.BeginForm()を使用できますか?そうでない場合、別のコントローラーにリダイレクトするにはどうすればよいですか?
ヘッドセクションのコードがJqueryMobileのデフォルトのajax動作をオフにしないのはなぜですか?(data-ajax = falseなしで上記のフォームタグを使用しようとしましたが、@ Html.BeginFormが表示したのと同じ空白の白い画面が表示されました)。
編集:これが私のログオンコントローラーコードです(アカウントコントローラー)
public ActionResult LogOn()
{
//return View();
return SelectView("Logon", null);
}
private ActionResult SelectView(string viewName, object model, string outputType = "html")
{
if (outputType.ToLower() == "json")
{
return Json(model, JsonRequestBehavior.AllowGet);
}
else
{
#if MOBILE
return View(viewName + ".Mobile", model);
#else
if (Request.Browser.IsMobileDevice)
{
return View(viewName + ".Mobile", model);
}
else
{
return View(viewName, model);
}
#endif
}
}
これが私のRegisterコントローラーコードです:(アカウントコントローラー)
public ActionResult Register(string returnUrl = "")
{
//if no return url supplied, use referrer url.
//Protect against endless loop by checking for empty referrer.
if (String.IsNullOrEmpty(returnUrl) && Request.UrlReferrer != null && Request.UrlReferrer.ToString().Length > 0)
{
return RedirectToAction("Register", new { returnUrl = Request.UrlReferrer.ToString() });
}
return View();
}