2015-08-24 2 views
2

Я использую MVC 4 и хочу отправить форму и некоторые другие значения методу controller с использованием Ajax Call, но я не могу это сделать после того, как вы так старались. Посмотрите мой код ниже и помогите мне с некоторыми улучшениями в моем коде.Значения, не идущие на метод контроллера с использованием Ajax Call

код моего сценария:

$(document).ready(function() { 

      var ids = []; 
     $("#btnproceed").click(function() { 
      debugger; 
      // $("div[class^='apple-']") 

      $("div[class^='dvDynamic_']").each(function() { 
       debugger; 


       var pids = $(this).text(); 

       ids.push(pids); 

      }); 

      ids = []; 
}); 

Код формы сериализовать и отправить:

  <form id="customerform"> 
      <div id="customerdetails"> 
       <label>Your Information</label><br /> 

       @*@for (int i = 0; i < Model.Orders.Count; i++) {*@ 
       @Html.TextBoxFor(m => m.Orders.Customer, new { @placeholder = "Enter Your Full Name" }) 
       @Html.ValidationMessageFor(m => m.Orders.Customer) 
       @Html.TextBoxFor(m => m.Orders.Phone, new { @placeholder = "Enter Your Cell Number" }) 
       @Html.ValidationMessageFor(m => m.Orders.Phone) 
       @Html.TextAreaFor(m => m.Orders.Address, new { @rows = 3, @cols = 2, @style = "width:300px;", @placeholder = "Enter Your Complete Delivery Address" }) 
       @Html.ValidationMessageFor(m => m.Orders.Address) 


       <input id="btnback" type="button" value="Back" /> <input id="btnsubmit" type="button" value="Submit" /> @*<input id="submit" type="submit" value="Save" />*@ 

      </div> 
     </form> 

Кодекс моей последней кнопки отправки:

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

     debugger; 


      var form = [{ "name": "customerinfo", "value": JSON.stringify($('#customerform')) }]; 
      var data = JSON.stringify({ 
       'products': ids, 
       'customerinfo': form 

      }); 

      $.ajax({ 

       type: "POST", 
       url: "@Url.Action("GetIds", "Store")", 
       data: data, 
       contentType: "application/json; charset=utf-8", 

      success: function (r) { 
       alert(r.d); 
      } 
     }); 
}); 

и код моего приема метод в controller

public JsonResult GetIds(string products, string customerinfo) 
{ 
} 

значение в методе контроллера приходит пустое

+0

помогите преодолеть эту проблему – user3772251

+0

Почему вы объявляете массив 'ids = [];', заполняете его в '$ .each()' и возвращаете его обратно в пустой массив (последняя строка первого скрипт)? Что вы действительно хотите опубликовать? Форма и дополнительный массив значений? –

+0

@StephenMuecke Да, я хочу опубликовать форму и значения в идентификаторах массива, которые будут поступать с предыдущей кнопки. Это метод для получения значений идентификаторов [] правильно? – user3772251

ответ

1

Вы можете сериализовать форму и добавить дополнительные данные к нему

var data = $('form').serialize() + '&' + $.param({ 'products': ids }, true); 
var url = '@Url.Action("GetIds", "Store")'; 
$.post(url, data, function(r) { alert r.Id; }); 

и изменить вас метод

public JsonResult GetIds(ProductOrderViewModel model, string[] products) 

Однако вы первый сценарий инициализирует новый массив (var ids = [];), добавляет объекты к нему а затем сбрасывает его в пустой массив (последняя строка вашего кода - ids = [];). Предложите вам просто проверить это, используя var ids = []; ids.push('abc'); ids.push('def'); для тестирования на начальном этапе.

+0

дорогие значения, приходящие таким образом, но как изменить, чтобы получить значения из первого скрипта щелчка кнопки ids [] – user3772251

+0

да, это правильно связывает .. но я хочу получить идентификаторы [] значений, где Я заполняю массив с первой кнопки click.how может это сделать – user3772251

+0

Что касается 'ids' - просто удалите последнюю строку кода -' ids = []; '. Но ваш код в любом случае предлагает проблему с вашим дизайном - вы просто получаете '.text()' элементов, которые не редактируются, поэтому это означает, что вы просто отправляете обратно данные, которые вы уже знаете в контроллере. –

0

Вы должны построить более сложную модель, чтобы связать данные формы. Что-то вроде этого:

public JsonResult GetIds(InputModel model) 
{ 

} 

public class InputModel 
{ 
    public string[] Products { get; set; } 
    public CustomerInfoModel CustomerInfo { get; set; } 
} 

public class CustomerInfoModel 
{ 
    public string Name { get; set; } 
    public string Value { get; set; } 
} 

Вы могли бы сделать некоторые рефакторинга и пропустить JSON.stringify($('#customerform')) часть и вместо того, чтобы соответствовать модели с вашей формой.

+0

дорогой, вы имеете в виду, что все остальное в порядке? – user3772251

+0

Я пробовал это, но не успел – user3772251

+0

Я предполагаю, что сообщение ajax, отправленное в конечную точку, верное. В противном случае вам нужно отправить запрос json здесь. – Martin

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