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
正如您在Partial View中看到的那样 - 我在HTML.BeginForm中提到了操作,我也提交了表单。我认为请求提交的时间超过了一次?
答案 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
将视图放在其中一个文件夹中可以解决问题