0

JQuery

$(document).ready(function () {
    var EmailContainer = $('#EmailContainer');
    var url = EmailContainer.attr('data-url');
    EmailContainer.load(url, function () {
        var Emailform = $('#EmailForm');
        $.validator.unobtrusive.parse(Emailform);
        Emailform.submit(function () {
            debugger;
            var Emailform = $(this);
            if (Emailform.valid()) {
                var SendEmailUrl = EmailContainer.attr('Json-Url');
                var UserModel = { From: $('#From').val(), To: $('#To').val(), 
                      Subject: $('#Subject').val(), 
                      Description: $('#Description').val() }
                $.post(SendEmailUrl, UserModel, function (data) {
                    Emailform.html(data);
                    Emailform.removeData('validator');
                    Emailform.removeData('unobtrusiveValidation');
                    $.validator.unobtrusive.parse(Emailform);
                });
            }
            return false;
        });
    });
});

アドミン コントローラの部分図

@model _1.Areas.Email.Models.User
@using (Html.BeginForm("SendEmail", "Admin", FormMethod.Post, new { id = "EmailForm" }))
{
    @Html.LabelFor(i => i.From);
    @Html.TextBoxFor(i => i.From);
    @Html.ValidationMessageFor(i => i.From);
    <br />
    @Html.LabelFor(i => i.To);                           
    @Html.TextBoxFor(i => i.To); 
    @Html.ValidationMessageFor(i => i.To);
    <br />     
    @Html.LabelFor(i => i.Subject);                           
    @Html.TextBoxFor(i => i.Subject);
    @Html.ValidationMessageFor(i => i.Subject);
    <br />
    @Html.LabelFor(i => i.Description);                           
    @Html.TextBoxFor(i => i.Description);
    @Html.ValidationMessageFor(i => i.Description);
    <br />
    <input type="submit" value="Send Email" id="SendMail" />
}

問題 - 管理コントローラの部分ビューを送信するとき。「500内部サーバーエラー」が発生しています

ここに画像の説明を入力

アップデート - 1

部分ビューでわかるように、HTML.BeginForm のアクションについて言及しており、フォームを送信しています。リクエストが複数回送信されていると思いますか?

4

2 に答える 2

1

エラー メッセージには、アプリケーションが "SendMail" というビューを見つけようとしていることが示されているため、これは下の行でビューを要求しているためです。

[HttpPost]
public ActionResult SendMail(User Model)
{
    new MailController().SendMail(Model).DeliverAsync();
    return View(); // this is causing a redirect to a get version of this call
                   // asking for a view.
}

HTML または JSON 応答を返す予定ですか? HTML の場合は、ビューを追加します。そうでない場合は a を返しますJsonResult

于 2013-02-19T12:47:13.260 に答える
0

jQuery と AJAX を使用すると、MVC はエラー ページをクライアントに送り返しますが、ステータス コードは「200 OK」ではなく「500 内部サーバー エラー」であるため、jQuery は指定したコールバック関数を実行しません。 AJAX 呼び出し。

問題は、メール テンプレート (ビュー、.vbhtml) が見つからないことです。

return Email("SendMail", model);

上記のコードは、コントローラーに「SendMail.vbhtml」というビューを見つけるように指示します。最後の写真では、MVC が「SendMail.vbhtml」を検索した場所を確認できます ~/Areas/Email/Views/Admin~/Views/Shared

これらのフォルダーのいずれかにビューを配置すると、問題が解決するはずです

于 2013-02-19T12:38:18.970 に答える