gpt4 book ai didi

javascript - asp.net-mvc ajax json post 到 Controller 操作方法

转载 作者:行者123 更新时间:2023-12-03 00:52:27 25 4
gpt4 key购买 nike

我知道同样的问题有答案,但它们在我的项目中不起作用。我有 Controller ,我可以向员工发送消息。我用ajax获取的id。我从数据库获取的电子邮件。但是 getEmployeeEmail() 返回我的电子邮件(这是正确的) Controller 名称:EmployersActivity

当我发送帖子时,代码不起作用。我的ajax邮政编码:

$(document).ready(function () {
$(".buttonSendEmail").click(function () {
var orderText = $(".orderData").text();
alert(orderText);
$.ajax({
type: "POST",
contentType: 'application/json; charset=utf-8',
url: "@(Url.Action("Create", "EmployersActivity"))",
data: { id: 1 },
dataType: "json",
traditional: true,
error: function (message) {
alert("error on start")
$(".contentReqGood").show();
redirect();
},
success: function (result) {
if (result.status === 1) {
alert("error")
} else {
$(".contentReqGood").show();
redirect();}})})});

asp.net mvc 代码:

    [HttpGet]
[Authorize]
public ActionResult Create()
{
return View();
}

[HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
public ActionResult Create(int? id)
{
if (id == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

var email = db.employees.Find(id);
if (email == null)
return HttpNotFound();
if (email != null)
{


if (db.SaveChanges() == 1)
{
string mailTemplate;
string title = "asdasd";
string preview = "asdasdasd";
var sr = new StreamReader(Server.MapPath("~/App_Data/Templates/" + "InfoEmail.txt"));

mailTemplate = sr.ReadToEnd();

string messageBody = string.Format(mailTemplate, title, preview);

new MailSender
{
Sender = "news@omegasoftware.eu",
Recipient = "news@omegasoftware.eu",
RecipientsBcc = getEmployeeEmail(),
Subject = title,
Body = messageBody
}.Send();}}
return View();}

最佳答案

您对当前示例有几个问题:

1) [Authorize] 属性在 POST 方法上是不必要的,因为在 GET 操作方法中使用它应该足以防止未经授权的用户。

2) 由于您将 AJAX 请求发送到包含 [ValidateAntiForgeryToken] 属性的 POST 方法,因此有必要将 CSRF 预防 token 发送到 AJAX 请求中。

3) 删除 dataType: "json", contentType: 'application/json; charset=utf-8'traditional: true 因为您发送的是单个整数数据而不是使用数组或 JSON 格式的字符串。

4) AJAX 回调旨在保留在同一页面中,因此 return View() 应替换为 return PartialView()

基于以上4个问题,如果需要使用AJAX,您应该设置请求和 Controller Action ,如下例所示:

AJAX 请求

$(document).ready(function () {
$(".buttonSendEmail").click(function () {
var orderText = $(".orderData").text();
alert(orderText);

var form = $('form');
var token = $('input[name="__RequestVerificationToken"]', form).val();

$.ajax({
type: "POST",
url: "@Url.Action("Create", "EmployersActivity")",
data: { id: 1, __RequestVerificationToken: token },
error: function (message) {
alert("error on start");
// other stuff
},
success: function (result) {
$(".contentReqGood").show();
// other stuff
}
});
});
});

Controller 操作

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(int? id)
{
if (id == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

var email = db.employees.Find(id);
if (email == null)
return HttpNotFound();
if (email != null)
{
// do something
}
return PartialView("_PartialViewName");
}

除此之外,如果您想将整个 View 模型内容传递给 POST 操作方法或在提交后使用 RedirectToAction() 进行重定向,那么您应该使用普通表单提交(使用 Html. BeginForm() 辅助函数)。

关于javascript - asp.net-mvc ajax json post 到 Controller 操作方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52994710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com