gpt4 book ai didi

c# - Controller 总是收到空参数

转载 作者:行者123 更新时间:2023-11-30 19:39:52 27 4
gpt4 key购买 nike

我的联系人 Controller 操作总是收到一个空对象。我错过了什么?

Controller

(我在mail.Body赋值处加了断点,整个message对象为null)

[HttpPost]
public ActionResult Contact(ContactMessage message)
{
var mail = new MailMessage();
var client = new SmtpClient("localhost");
mail.From = new MailAddress("************");
mail.To.Add(new MailAddress("****************"));
mail.Subject = "New Message from *************.com";
mail.Body = message.Message;

client.Send(mail);

return Json(new { success = true });
}

模型

public class ContactMessage
{
[Required]
[PlaceHolder("john.smith@example.com")]
public string EmailAddress { get; set; }
[Required]
[PlaceHolder("John Smith")]
public string Name { get; set; }
[Required]
[PlaceHolder("I am interested in...")]
[DataType(DataType.MultilineText)]
public string Message { get; set; }

public bool Delivered { get; set; }

public ContactMessage()
{
this.Delivered = false;
}
}

在 View 中触发的 javascript

<script>
$(document).ready(function () {
$("#contactForm").submit(function (event) {
event.preventDefault();
var $form = $(this);

if ($form.valid()) {
$.ajax({
url: "/Contact",
type: "POST",
data: { Name: 'boom', EmailAddress: 'pow', Message: 'boom boom pow' }
}).success(function (response) {
if (response.success) {
alert("success");
} else {
alert("not success");
}
}).fail(function () {
alert("fail");
});
}
});
});
</script>

我也尝试过使用 Postman 发送数据 - 但这似乎也会导致空对象。

enter image description here


更新

我做了一些更改(和进步),但仍有问题。

根据 Paul Zahra 的 关于错误命名的建议,该类现在位于 ContactData(而非 ContactMessage)中

按照 ekad 的回答,消息对象不再完全为 null,而是一个具有 null NameEmailAddress 和 null 的 ContactMessage 对象消息 属性。

我还添加了 contentType 属性,感谢 ramiramilu 的ekad 的 的回答

更新代码:

[HttpPost]
public ActionResult Contact(ContactData data)
{
var mail = new MailMessage();
var client = new SmtpClient("localhost");
mail.From = new MailAddress("************");
mail.To.Add(new MailAddress("************"));
mail.Subject = "New Message from ************.com";
mail.Body = data.Message;

client.Send(mail);

return Json(new { success = true });
}

<script>
$(document).ready(function () {
$("#contactForm").submit(function (event) {
event.preventDefault();
var $form = $(this);
var msg = { Name: "boom", EmailAddress: "pow", Message: "boom boom pow" };

if ($form.valid()) {
$.ajax({
url: "/Contact",
type: "POST",
data: JSON.stringify({ message: msg }),
contentType: "application/json; charset=utf-8"
}).success(function (response) {
if (response.success) {
alert("success");
} else {
alert("not success");
}
}).fail(function () {
alert("fail");
});
}
});
});
</script>

最佳答案

由于controller action方法中的message不是javascript原始类型,所以传递参数时需要使用JSON.stringify。如下更改您的 javascript:

<script>
$(document).ready(function () {
$("#contactForm").submit(function (event) {
event.preventDefault();
var $form = $(this);
var msg = { Name: "boom", EmailAddress: "pow", Message: "boom boom pow" };

if ($form.valid()) {
$.ajax({
url: "/Contact",
type: "POST",
data: JSON.stringify({ data: msg }),
contentType: "application/json; charset=utf-8"
}).success(function (response) {
if (response.success) {
alert("success");
} else {
alert("not success");
}
}).fail(function () {
alert("fail");
});
}
});
});
</script>

此外,JSON.stringify 方法中的参数名称(data)来自上面的代码:

JSON.stringify({ data: msg })

必须与 Controller 中Contact Action 方法的参数名相同:

public ActionResult Contact(ContactData data)

关于c# - Controller 总是收到空参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25976399/

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