Передача многомерного массива из ajax в ASP.NET MVC - PullRequest
0 голосов
/ 06 мая 2018

Я пытался отправить данные json из AngularJs $http post на контроллер ASP.NET MVC. Вот пример данных json:

     var postdata = {
        Email: "test1@mail.com",
        selectedanswer: {0: 3, 1: 2, 2: 0, 3: 3, 4: 1}                       
    };

Код AngularJs:

    $http({
        url: "/page/PostFileWithData",
        headers: {
           'Content-Type': 'application/json; charset=utf-8'
        },
        method: "POST",
        dataType: "json",
        traditional: true,
        data: JSON.stringify(postdata)    
    }).success(function (data) {
        console.log(data);
    }).error(function (data) {
        console.log('fail');
    });

Контроллер:

    public JsonResult PostFileWithData(UserModel userdata)
    { 
        UserModel udata = new UserModel {
            Email = userdata.Email  
            selectedanswer = userdata.selectedanswer
        };

        return Json(udata, JsonRequestBehavior.AllowGet);
    }

Моя модель:

    public class UserModel {
        public string Email { get; set; }
        public string selectedanswer { get; set; }
    }

Теперь проблема в том, что я получаю email поле ok в console.log, но selectedanswer равно null

Как это

    { Email: "test1@gmail.com", selectedanswer: null }

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Привязка модели не работает для свойства selectedanswer, поскольку оно объявлено как тип string, и вы не отправляете строковое значение из кода на стороне клиента. Это будет работать нормально, если вы отправите строковое значение

var postdata = {
                  Email: "test1@mail.com",
                  selectedanswer: "{ 0: 3, 1: 2, 2: 0, 3: 3, 4: 1 }"
               };

Хотя это может решить проблему привязки модели, это не является чистым решением вашей проблемы. Теперь в вашем методе действия вам нужно проанализировать эту строку и извлечь из нее элементы. Есть еще один чистый способ сделать это .

Похоже, вы хотите отправить список ответов и его идентификатор / индекс. Создайте модель представления, представляющую этот Strucutre, и используйте коллекцию этого в вашем классе UserModel.

public class UserModel
{
    public string Email { get; set; }
    public List<Answer> SelectedAnswers { set; get; }
}
public class Answer
{
    public int QuestionId { set; get; }
    public int AnswerId { set; get; }
}

Теперь отправьте массив элементов, каждый со значениями свойств QuestionId и AnswerId.

var postdata = {  Email: "test1@mail.com",
                  SelectedAnswers : [
                                       { QuestionId:0, AnswerId:3 },
                                       { QuestionId:1, AnswerId:2 },
                                       { QuestionId:2, AnswerId:0 },
                                       { QuestionId:3, AnswerId:3 },
                                       { QuestionId: 4, AnswerId:1}
                                    ] };
// to do  : send postdata
0 голосов
/ 06 мая 2018

Поскольку вы передаете объект Key-Value из Ajax, измените модель на

public class UserModel
{
    public string Email { get; set; }
    public Dictionary<int,int> selectedanswer { get; set; }
}

Или, альтернативно, отправьте selectedanswer в строке, например ниже:

var postdata = {
    Email: "test1@mail.com",
    selectedanswer: "{0: 3, 1: 2, 2: 0, 3: 3, 4: 1}"
};

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...