Вопрос по json, asp.net-mvc, c# – Передача неструктурированного JSON между JQuery и действиями контроллера MVC

1

Существует довольно много полезной информации о привязке модели MVC. Моя проблема связана с тем фактом, что я пытаюсь избежать создания строго типизированных данных в моем приложении MVC, поскольку оно в основном должно выступать в качестве маршрутизатора данных.

В основном, у меня есть набор полей на странице с классом 'input', который я могу собрать с помощьюjQuery('.input'), переберите и вставьте в объект JavaScript. Затем я отправляю это на мой контроллер ASP.NET MVC:

var inputData = my_serialize( $('input');
$.ajax({
  type:'POST',
  url: '/acme/Ajax/CaptureInput',
  dataType: "json",
  data: { inputData: JSON.stringify(inputData) },
  success: Page_Response_RegisterAndDeposit,
  error: Page_AjaxError
});

На стороне C # у меня есть

public JsonResult CaptureInput(string inputDataAsJsonString)
{
  JavaScriptSerializer JSON = new JavaScriptSerializer();
  object inputData = JSON.DeserializeObject(inputDataAsJsonString);

Это похоже на расточительный уровень косвенности, я бы предпочел передавать данные как contentType: application / json и CaptureInput приниматьobject илиIDictionary или дажеdynamic.

Потому что в конце концов я хочу использовать тот же код для отправки более структурированных данных, содержащих рекурсивно определенные объекты js. JSON выглядит лучше, чем пары имя-значение. Chris Becke
А почему ты отправляешь это как JSON? LukLed

Ваш Ответ

2   ответа
1

Ты можешь использовать SerializeArray метод. Предположим, у вас есть форма, содержащая элементы ввода, которые могут быть любого типа, и вы хотите вызвать следующее действие контроллера:

public ActionResult CaptureInput(Dictionary<string, string> values)
{
    ...
}

вот как вы могли бы продолжить:

<script type="text/javascript">
    var values = $('form').serializeArray();
    var data = {};
    $.each(values, function (index, value) {
        data['[' + index + '].key'] = value.name;
        data['[' + index + '].value'] = value.value;
    });

    $.ajax({
        url: '@Url.Action("CaptureInput")',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify(data),
        success: function (result) {
            alert('success');
        }
    });
</script>
0

что вам нужно, но, возможно, решение этой проблемы даст вам частичный обходной путь, позволяя привязать простой объект-обертку со встроенным словарем. Это может даже позволить привязку непосредственно к словарю. Не уверен ... Вам также может понадобиться явно установить заголовок json ContentType в вашем вызове $ .ajax

"Привязка модели JSON для IDictionary <> в ASP.NET MVC / WebAPI"

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