0

だから私はここで何が起こっているのか分かりません。アクションから部分ビューをロードするこのモーダル ポップアップがあります (これが問題になる可能性があります??)。部分ビューは完全に読み込まれ、正常に処理されますが、投稿が終了して 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 });
            }

        }
4

1 に答える 1