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 则添加一个视图;如果不返回一个JsonResult.

于 2013-02-19T12:47:13.260 回答
0

当您使用 jQuery 和 AJAX 时,MVC 会将任何错误页面发送回客户端,但由于状态码不是“200 OK”而是“500 internal server error”,jQuery 不会运行您给它的回调函数AJAX 调用。

您的问题是,找不到邮件模板(视图,.vbhtml)。

return Email("SendMail", model);

上面的代码告诉控制器找到一个名为“SendMail.vbhtml”的视图。在您的最后一张图片中,您可以看到 MVC 在哪里寻找“SendMail.vbhtml”: ~/Areas/Email/Views/Admin~/Views/Shared

将您的视图放在其中一个文件夹中应该可以解决问题

于 2013-02-19T12:38:18.970 回答