gpt4 book ai didi

javascript - 将复杂的字典发布到 Controller

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:58 25 4
gpt4 key购买 nike

我正在尝试将以下类型发布到我的 Controller 。

型号

public class EmailNotificationSettings
{
public string EmailHost { get; set; }
public string EmailPassword { get; set; }
public int EmailPort { get; set; }
public string EmailSender { get; set; }
public string EmailUsername { get; set; }
public bool Enabled { get; set; }
public bool EnableUserEmailNotifications { get; set; }
public string RecipientEmail { get; set; }
public Dictionary<NotificationType, NotificationMessageContent> Message { get; set; }
}

通知类型

public enum NotificationType
{
NewRequest,
Issue,
RequestAvailable,
RequestApproved,
AdminNote,
Test,
}

NotificationMessageContent

public class NotificationMessageContent
{
public string Subject { get; set; }
public string Body { get; set; }
}

现在,除了Message 之外,所有属性都是我的表单的一部分。以下是我计划如何填充 Message

查看

<label for="newRequestSubject" class="control-label">New Request Subject</label>
<div>
<input type="text" class="form-control form-control-custom " id="newRequestSubject" name="newRequestSubject" value="@Model.Message.FirstOrDefault(x => x.Key == NotificationType.NewRequest).Value.Subject">
</div>

<label for="newRequestBody" class="control-label">New Request Body</label>
<div>
<input type="text" class="form-control form-control-custom " id="newRequestBody" name="newRequestBody" value="@Model.Message.FirstOrDefault(x => x.Key == NotificationType.NewRequest).Value.Body">
</div>

要发布的 Javascript

 $('#save').click(function (e) {
e.preventDefault();

var newRequestObj = {
"Subject": $('#newRequestSubject').val(),
"Body": $('#newRequestBody').val()
};
var message = { 'NewRequest': JSON.stringify(newRequestObj) };

var $form = $("#mainForm");
var data = $form.serialize();

data = data + "&" +JSON.stringify(message);

$.ajax({
type: $form.prop("method"),
data: data,
url: $form.prop("action"),
dataType: "json",
success: function (response) {
// Do something
}
});
});

现在这显然是错误的方法,因为我的 Message 属性没有被填充。

知道如何 POST 到 Controller 并更新我的模型吗?

Controller if you want to see (Using NancyFX)

private Response SaveEmailNotifications()
{
var settings = this.Bind<EmailNotificationSettings>();
// settings.Message doesn't contain the new values
}

最佳答案

我想不出一种方法让它与纯 HTML 一起工作。问题是您需要提交一个包含数据的名称为“Message”的控件,然后 MVC 映射引擎会将该控件映射到模型的“Message”属性。

我能想到的最好方法是使用一个 JavaScript 函数(绑定(bind)到表单的 onsubmit 事件),它将信息收集为一个对象数组并将其分配给一个名为“Message”,然后将其与其余表单数据序列化并提交表单。

关于javascript - 将复杂的字典发布到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38266082/

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