上午,
今天我遇到了在MVC(ASP.NET Core,C#)中将数据发送回Controller的问题。
基本上我有一个Ajax调用:
function PostEmailList() {
var finalData = {};
var x = document.getElementById("CsvSelectIn");
for (i = 0; i < x.length; i++) {
finalData['myDictionary[' + i + '].Key'] = x.options[i].text;
finalData['myDictionary[' + i + '].Value'] = parseInt(x.options[i].value);
}
finalData['Email'] = $("#textBoxEmail").val();
$.ajax({
url: 'FormSubmit',
type: 'POST',
data: finalData,
success: function (data) {
$("#EmailList").html($("#EmailList").html() + data);
}
})
return false;
此调用将选择选项列表排序到字典中并将它们发送到控制器。它还会发送一个电子邮件地址。
Controller接收它:
[HttpPost]
public ActionResult FormSubmit(String Email, Dictionary<string, int?> myDictionary)
{
FileUploadDetailView viewModel = new FileUploadDetailView();
viewModel.Email = Email;
viewModel.arrayPositions = myDictionary;
return PartialView("EmailList", viewModel);
}
参数完美无缺。
但是,正如您所见,他们必须手动应用于ViewModel
。无论如何,我似乎找不到将字典传回viewmodel
的方法。但是,我似乎也无法找到将ViewModel
数据作为单独参数传回字典的方法。
如果我要发送数据:
function PostEmailList() {
var finalData = {};
var x = document.getElementById("CsvSelectIn");
for (i = 0; i < x.length; i++) {
finalData['myDictionary[' + i + '].Key'] = x.options[i].text;
finalData['myDictionary[' + i + '].Value'] = parseInt(x.options[i].value);
}
$.ajax({
url: 'FormSubmit',
type: 'POST',
data:
{
Email: $("#textBoxEmail").val(),
finalData
},
success: function (data) {
$("#EmailList").html($("#EmailList").html() + data);
}
})
return false;
};
这是发送的电子邮件,然后是字典。我无法完全理解Ajax如何发送数据,但我知道这是错误的,因为以下post方法无法正确传递字典:
[HttpPost]
public ActionResult FormSubmit(FileUploadDetailView viewModel, Dictionary<string, int?> myDictionary)
{
viewModel.arrayPositions = myDictionary;
return PartialView("EmailList", viewModel);
}
这会将Email
成功添加到viewModel
参数中。然而,字典变为大小2与&#34; Email
&#34;和&#34; finalData
&#34;作为没有价值的钥匙。
有没有办法将数据传递给viewModel参数并成功发送字典?