私はMVCにかなり慣れていないので、jQueryモーダルダイアログポップアップに移動することを除いて、インターネットアプリケーションテンプレートの既存の登録機能を使用したいプロジェクトです。
これが私の「新しいユーザー」ボタンのクリックイベントです。この質問の答えからアイデアを得ました:
$("#new-user").click(function () {
$("#dialog-modal").empty(); // clear it out first
$("#dialog-modal").dialog({
height: 600,
width: 500,
title: "New User",
modal: true,
open: function (event, ui) {
$(this).load("@Url.Action("Register")");
},
buttons: {
"Add New User": function (e) {
var $this = this;
var form = $('form', $this);
$.post("Account/Register", JSON.stringify($(form).serializeObject()),
function () {
$($this).dialog("close");
});
}
}
});
});
メソッドは次のUrl.Action
ようになります。
[HttpGet]
public ActionResult Register()
{
return View("_Register");
}
そして、私の_Register.cshtml View は、基本的にテンプレートからのもののコピーです:
@model MyProject.Models.RegisterModel
@{
Layout = null;
ViewBag.Title = "Register";
}
<hgroup class="title">
<h1>@ViewBag.Title.</h1>
<h2>Create a new account.</h2>
</hgroup>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<fieldset>
<legend>Registration Form</legend>
<ol>
<li>
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName)
</li>
<li>
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password)
</li>
<li>
@Html.LabelFor(m => m.ConfirmPassword)
@Html.PasswordFor(m => m.ConfirmPassword)
</li>
<li>
@Html.LabelFor(m => m.DisplayName)
@Html.TextBoxFor(m => m.DisplayName)
</li>
<li>
@Html.LabelFor(m => m.Email)
@Html.TextBoxFor(m => m.Email)
</li>
</ol>
</fieldset>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
ここで、[新しいユーザーの追加] ボタンをクリックすると、インターネット アプリケーション テンプレートの組み込みアクション メソッドであるAccount/Registerにフォームがポストされていることがわかります。それはまったく変更されておらず、まだ飾られています:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
ただし、[新しいユーザーの追加] をクリックしてフォームが投稿されるたびに、次の 500 エラー メッセージが表示されます (Fiddler で表示)。
必須の偽造防止フォーム フィールド「__RequestVerificationToken」が存在しません
1) 私のRegister.cshtmlビューにはまだ含まれており@Html.AntiForgeryToken()
、2) その Javascript に足を踏み入れて の値を見ると、次のように表示されるため、なぜそれが存在しないのかJSON.stringify($(form).serializeObject()
わかりません。
"{"__RequestVerificationToken":"X3APKURbjYGUYqY2qg1VdbYl50eVNzd7TJLYKCGC-awgkK7iNH_W6bVOw7C8zHDlygP0rVO2K4TLn5KE9CYsQN8VN1DbOOV0KzMGT7xso3o1","UserName":"theUserName","Password":"thePassword","ConfirmPassword":"thePassword","DisplayName":"theDisplayName","Email":"theEmail "}"
誰かが私が間違っていることを見ることができますか?