2014-09-09 5 views
0

Я разрабатываю приложение MVC.как отправить значения формы, используя вызов ajax, без кнопки отправки

Я хочу отправить форму с помощью функции ajax, не используя стандартное событие нажатия кнопки отправки.

Я хочу передать объект модели вместе со строкой массива (который не связан с объектом модели.)

У меня есть ниже код Создать Посмотреть

@using (Html.BeginForm("Create", "AdviceCreate", FormMethod.Post, new { enctype = "multipart/form-data", id = "frmCreate", onsubmit = "disableSubmitButton()" })) 

{ }

$('#create').click(function() { 

      alert("create") 

      var count = $(".clsInvoiceId").length; 
      var invoiceDetailsArray = new Array(); 
      var ledgerDetailsArray = new Array(); 

      var obj = '@Html.Raw(Json.Encode(Model))'; 



      $.ajax({ 
       contentType: 'application/json; charset=utf-8',   
       url: '@Url.Action("Create", "AdviceCreate")', 
       type: 'POST',  

       data: 
       JSON.stringify({ 
        AdviceCreateVM : obj, 
        InvoiceDetails : invoiceDetailsArray, 
        LedgerDetails : ledgerDetailsArray 

       }),    
       success: function() { 

       } 
      }); 
     }); 

и ниже кода в контроллере

public ActionResult Create(AdviceCreateVM AdviceCreateVM, string[] InvoiceDetails, string[] LedgerDetails) 
{ 
} 

, но в контроллере AdviceCreateVM поставляется как NULL ...

отсутствует?

+0

У вас было предупреждение о 'alert (obj)' перед отправкой? –

+0

показать вывод 'obj' coz, я думаю, вы выводите строку, а связующее устройство модели не может связывать тип с' AdviceCreateVM' –

+0

@ DotNet Dreamer, пожалуйста, объясните, не понял ... – bnil

ответ

1

Если я понимаю вас, вы хотите вручную отправить форму нажатием кнопки и вместе с ней, вы хотите предоставить дополнительные данные.

Редактировать: Исправлены некоторые ошибки. здесь работает Example in .Net Fiddle check console.log выход в скрипке. Удаленный контент-тип, как мы его настраиваем, jquery ajax автоматически обнаружит его.

$('#create').click(function (e) { 

      e.preventDefault(); 
      alert("create") 

      var count = $(".clsInvoiceId").length; 
      var invoiceDetailsArray = new Array(); 
      var ledgerDetailsArray = new Array(); 

      //If you have validation attached, then you need to validate the form first and before submit if form is valid. 

      var obj =$("#frmCreate").serializeArray(); //serializeArray gives you a name,value object 
      //Append extra data to above name/value collection, 
      obj.push({name: 'InvoiceDetails', value: invoiceDetailsArray}); 
      obj.push({name: 'LedgerDetails', value: ledgerDetailsArray}); 

      $.ajax({ 

       url: '@Url.Action("Create", "AdviceCreate")', 
       type: 'POST',  

       data: 
       obj,    
       success: function() { 

       } 
      }); 
     }); 
+0

Спасибо за ваши усилия ... но все еще на уровне контроллера, объект не содержит никаких значений, все свойства пустые ... – bnil

+0

Проверьте https://dotnetfiddle.net/DK3mPN – SSA

+0

Это работает ... Большое спасибо – bnil

1

Обычно я делаю это:

var postData = $("#form1").serializeArray(); 

$.ajax({ 
       contentType: 'application/json; charset=utf-8',   
       url: '@Url.Action("Create", "AdviceCreate")', 
       type: 'POST',  

       data: postData 

       success: function() { 

       } 
      }); 
+0

Нет, я хочу отправить объект и массив отдельно, потому что я делаю время выполнения массива ... – bnil

+0

@ user1650894, вы можете использовать 'var data = $ ('# myForm'). serializeArray();' и добавлять дополнительные данные с помощью 'data.push ({InvoiceDetails: 'invoiceDetailsArray', LedgerDetails: ledgerDetailsArray});' –

+0

скажите, что ... mate push push push :) – codebased

0

Ваше мнение оказывается, прежде чем ваша функция нажатия кнопки называется (, потому что вы делаете на стороне клиента, вызов). так что ваш код

var obj = '@Html.Raw(Json.Encode(Model))'; 

является нулевым becuase Model является пришедшим нулем от контроллера. Итак, как вы говорите, вы получаете значения из динамических текстовых полей, тогда правильный путь - получить данные на стороне клиента (т. Е. С помощью jQuery или javascript) и вручную создать массив javascript и передать его на сервер, или вы должны улавливайте данные на сервере в контроллере после того, как форма будет отправлена ​​на сервер.
Наказание, если вы думаете о коде;

var obj = '@Html.Raw(Json.Encode(Model))'; 

будет получать данные после щелчка на стороне клиента, после чего вы находитесь на неправильном пути.

+0

спасибо за объяснение ... то какое решение для этого? – bnil

Смежные вопросы