ASP.NET MVC, Как передать JSON, возражает с Представления на Контроллер как Параметр

см. Документацию API ... ответ будет содержать символ валюты.

и пример на Github объясняет, как установить пункт назначения:

$rqData = new \hotelbeds\hotel_api_sdk\helpers\Availability();
$rqData->destination = new Destination("PMI");

52
задан Community 23 May 2017 в 02:31
поделиться

3 ответа

Редактирование:

Этот метод больше не должен быть необходим с прибытием MVC 3, поскольку это будет обработано автоматически - http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx

<час>

, можно использовать этот ObjectFilter:

    public class ObjectFilter : ActionFilterAttribute {

    public string Param { get; set; }
    public Type RootType { get; set; }

    public override void OnActionExecuting(ActionExecutingContext filterContext) {
        if ((filterContext.HttpContext.Request.ContentType ?? string.Empty).Contains("application/json")) {
            object o =
            new DataContractJsonSerializer(RootType).ReadObject(filterContext.HttpContext.Request.InputStream);
            filterContext.ActionParameters[Param] = o;
        }

    }
}

можно тогда применить его к методам контроллера как так:

    [ObjectFilter(Param = "postdata", RootType = typeof(ObjectToSerializeTo))]
    public JsonResult ControllerMethod(ObjectToSerializeTo postdata) { ... }

Так в основном, если тип контента сообщения является "application/json", это перейдет к действию и отобразит значения на объект типа, который Вы определяете.

50
ответ дан ChadT 7 November 2019 в 09:28
поделиться

Вы говорите, что "Я не использую формы для управления данными". Но Вы делаете POST. Поэтому Вы, на самом деле, используете форму, даже если это пусто.

.ajax's $ тип данных говорит jQuery, что вводит сервер, будет возврат , не, что Вы являетесь передающими. POST может только передать форму. jQuery преобразует данные в пары ключ/значение и передаст их как строку запроса. Из документов:

Данные, которые будут отправлены на сервер. Это уже преобразовывается в строку запроса, если не строка. Это добавляется к URL для ПОЛУЧАТЬ-ЗАПРОСОВ. См. processData опцию предотвратить эту автоматическую обработку. Объектом должны быть Пары ключ/значение. Если значением является Массив, jQuery сериализирует несколько значений с тем же ключом т.е. {нечто: ["bar1", "bar2"]} становится '& foo=bar1& foo=bar2'.

Поэтому:

  1. Вы не передаете JSON серверу. Вы передаете JSON jQuery.
  2. Образцовая привязка происходит таким же образом, это происходит в любом другом случае.
12
ответ дан Craig Stuntz 7 November 2019 в 09:28
поделиться

Существует класс JavaScriptSerializer , который можно использовать также. Это позволит Вам десериализовать json к объекту.NET. Существует дженерик Deserialize<T>, хотя Вам будет нужен объект.NET иметь подобную подпись как JavaScript один. Дополнительно существует также DeserializeObject метод, который просто делает плоскость object. Можно затем использовать отражение для достигания свойств, в которых Вы нуждаетесь.

, Если Ваш контроллер берет FormCollection, и Вы не добавили ничто больше к data, json должен быть в form[0]:

public ActionResult Save(FormCollection forms) {
  string json = forms[0];
  // do your thing here.
}
4
ответ дан swilliams 7 November 2019 в 09:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: