だから私はここで何が起こっているのか分かりません。アクションから部分ビューをロードするこのモーダル ポップアップがあります (これが問題になる可能性があります??)。部分ビューは完全に読み込まれ、正常に処理されますが、投稿が終了して json が返されると、モーダルを閉じて結果を投稿する代わりに、json の結果 (部分ビューではない) を表示する別のページにリダイレクトされます。私がこれにアプローチしている方法が正しいかどうかは完全にはわかりません。アクションが正常に処理された後にダイアログを閉じ、トランザクションが保存されたかエラーがスローされた場合はメッセージを返すだけです。
アドバイスをいただければ幸いです。ありがとう!!!
<script type="text/javascript">
$(function () {
$('#modal-link').click(function () {
var href = this.href;
$('#load-modal-dialog').dialog({
modal: true,
open: function (event, ui) {
$(this).load(href, function (result) {
$('#new-registration').submit(function () {
$.getJSON(href, function (data) {
if (data.success == true) {
$('#messages').html('woo!');
} else {
$('#messages').html('dafuq');
}
this.dialog('close');
});
});
});
}
});
return false;
});
});
</script>
ポップアップにロードされる部分ビュー
<% using (Html.BeginForm("New", "Registration", FormMethod.Post, new { id = "new-registration" })){ %>
<h2>Register Participant:</h2>
<div class="">
<%: Html.ValidationSummary(null, new { @class = "" })%>
<div class="">
<div class="">Email Address:</div>
<div class="">
<%: Html.TextBox("Email", null, new { @class = "" })%>
</div>
</div>
<button type="submit" value="Submit">Register</button>
</div>
<% } %>
アクション
public ActionResult New(){
return PartialView(context.Contest.FirstOrDefault(e => e.Id == 1));
}
[HttpPost]
public ActionResult New(FormCollection formCollection)
{
string email = formCollection["Email"].ToString();
try
{
if (email == "")
throw new Exception("Please provide an email address.");
Registration registration = new Registration
{
ContestId = 1,
Email = email
};
context.Registration.Add(registration);
context.SaveChanges();
return Json(new { success = "true", message = "User succesfully registered to Contest." });
}
catch (Exception ex)
{
//throw ex;
return Json(new { success = "false", message = ex.Message });
}
}