提交表单时遇到问题 - “500内部服务器错误”

时间:2013-02-19 12:22:05

标签: jquery asp.net-mvc asp.net-mvc-3

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内部服务器错误”

enter image description here

更新 - 1

正如您在Partial View中看到的那样 - 我在HTML.BeginForm中提到了操作,我也提交了表单。我认为请求提交的时间超过了一次?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

当你使用jQuery和AJAX时,MVC会将任何错误页面发送回客户端,但由于状态代码不是“200 OK”而是“500内部服务器错误”,jQuery将不会运行你的回调函数给了AJAX电话。

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

return Email("SendMail", model);

上面的代码告诉Controller找到一个名为“SendMail.vbhtml”的视图。 在你的上一张图片中你可以看到,MVC寻找“SendMail.vbhtml”: ~/Areas/Email/Views/Admin~/Views/Shared

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