使用Ajax调用发送ViewModel数据和Dictionary

时间:2017-12-15 09:56:55

标签: c# ajax asp.net-mvc dictionary asp.net-core

上午,

今天我遇到了在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参数并成功发送字典?

0 个答案:

没有答案