Asp.net Привязка значения MVC5 json к scafolding

#c# #jquery #asp.net #asp.net-mvc #json

#c# #jquery #asp.net #asp.net-mvc #json

Вопрос:

Я использую SyncFusion Asp.Net Сетка MVC, в которой я пытаюсь фильтровать на стороне сервера, и отправка json на сервер выглядит следующим образом

но в ViewModel, где свойства объекта отображаются как null, не является обязательным

Json

 {"select":["Area","Id"],"where":[{"isComplex":false,"field":"Area","operator":"startswith","value":"test","ignoreCase":true}],"sorted":[{"name":"Area","direction":"ascending"}]}
  

Я создал модели, как показано ниже, и это передается контроллеру, но не является обязательным.

  public class UserViewModel
    {
        public int skip { get; set; }
        public int take { get; set; }
        public Sort sorted { get; set; }
        public string[] group { get; set; }
        //Grid Action Params;
        public string action { get; set; }
        public string key { get; set; }
        public string keyColumn { get; set; }
        public string[] select { get; set; }
        public Search search { get; set; }
        public Where where { get; set; }
        public ApplicationUser value { get; set; }
    }

    public class Where
    {
        public bool isComplex { get; set; }
        public string field { get; set; }
        public string @operator { get; set; }
        public string @value { get; set; }
        public bool ignoreCase { get; set; }

    }
    public class Sort
    {
        public string name { get; set; }
        public string direction { get; set; }
     //   "sorted":[{"name":"Area","direction":"ascending"}],"group":["Area"]
    }

    public class Search
    {
        public string[] fields { get; set; }

        public string @operator { get; set; }

        public string key { get; set; }

        public bool ignoreCase { get; set; }
    }
  

Метод контроллера

  public async Task<ActionResult> DataSource(UserViewModel editParams)
   {

   }
  

Ответ №1:

Отправляемый вами JSON, похоже, вообще не соответствует вашей модели представления:

 {
    "select": [
        "Area",
        "Id"
    ],
    "where": [
        {
            "isComplex": false,
            "field": "Area",
            "operator": "startswith",
            "value": "test",
            "ignoreCase": true
        }
    ],
    "sorted": [
        {
            "name": "Area",
            "direction": "ascending"
        }
    ]
}
  

Рассмотрите возможность написания модели представления, которая будет соответствовать этой структуре:

 public class UserViewModel
{
    public string[] Select { get; set; }
    public Where[] where { get; set; }
    public Sorted[] sorted { get; set; }
}

public class Where
{
    public bool IsComplex { get; set; }
    public string Field { get; set; }
    public string Operator { get; set; }
    public string Value { get; set; }
    public bool IgnoreCase { get; set; }
}

public class Sorted
{
    public string Name { get; set; }
    public string Direction { get; set; }
}
  

и теперь ваше действие контроллера может принимать эту модель представления в качестве параметра:

 public async Task<ActionResult> DataSource(UserViewModel editParams)
{
    ...
}
  

Я не знаком с SyncFusion Asp.Net MVC grid которым вы, кажется, пользуетесь, но вы должны убедиться, что Content-Type: application/json заголовок HTTP запроса также отправляется вместе с AJAX-запросом, чтобы ASP.NET Привязка модели MVC к типу содержимого, отправленного от клиента. Используйте панель инструментов разработчика вашего веб-браузера или такой инструмент, как Fiddler, чтобы проверить запрос, отправленный от клиента, и убедиться, что этот заголовок присутствует. В противном случае модель представления не будет привязана.