#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, чтобы проверить запрос, отправленный от клиента, и убедиться, что этот заголовок присутствует. В противном случае модель представления не будет привязана.