2013-04-14 5 views
0

В моем приложении C# mvc4 у меня есть три объекта, которые я хочу передать в ActionResult, используя пост AJAX с JQuery. Объектами являются две строки и коллекция форм. У Ive не было проблем с передачей только коллекции форм, но, похоже, не удалось получить синтаксис для передачи всех трех. Вот что пытались Ive:C# JQuery Ajax Post Несколько параметров данных

$(document).ready(function() { 
     $('#ChangeName').click(function (e) { 
      var tdata = $('#form1').serialize(); 
      var origname = $('#NameDiv').find('input[name="myName"]').first().val(); 
      var newname = $('#NameDiv').find('input[name="updatedName"]').first().val(); 
      $.ajax({ 
       type: "POST", 
       data: {tdata + origname + newname}, 
       url: "Home/ChangeName", 
       success: function (result) { success(result); } 
      }); 
     }); 

Ive также пытались запятые после каждого имени переменной в разделе data: и без скобок. Как я могу пройти все три? Когда это было успешно, оба строковых значения правильно заполнялись при отладке, но значения не отображаются в ActionResult и вместо этого отображают нуль. Ive также попытался размещения этого ниже данных: contentType: "application/x-www-form-urlencoded",

Вот начало моего ActionResult, а также:

public ActionResult ChangeName(string Name, string updatedName, FormCollection mCollection) 
+1

'{}' вы строите объект, объект имеет 'пар ключ: value', вы конкатенации строк внутри объекта без назначения любые пары «ключ: значение». 'data: {tdata: tdata, origname: origname, newname: newname}' или просто 'data: 'tdata =" + tdata + "& origname =" + origname + "& newname =" + newname; ' – Ohgodwhy

+0

@Ohgodwhy Я просто попробовал оба ваших предложений и еще раз при отладке значений, заполняемых в Firebug, но как только код попадает в ActionResult, оба строковых значения отображаются как нулевые – HendPro12

ответ

3

Вы можете попробовать:

$(document).ready(function() { 
     $('#ChangeName').click(function (e) { 
      var tdata = $('#form1').serialize(); 
      var origname = $('#NameDiv').find('input[name="myName"]').first().val(); 
      var newname = $('#NameDiv').find('input[name="updatedName"]').first().val(); 
      $.ajax({ 
       type: "POST", 
       data: { 
        mCollection: tdata, 
        Name: origname, 
        updatedName: newname 
       }, 
       url: "Home/ChangeName", 
       success: function (result) { success(result); } 
      }); 
     }); 
+0

Спасибо! Вот и все! – HendPro12

+0

Однако это нарушает мою предполагаемую функциональность, добавляя origname и newname в FormCollection. Есть ли способ отправить все три из них без их включения в объект FormCollection? – HendPro12

0

Я думаю, что проблема заключается в том, как вы ставите origname и NEWNAME в запросе Ajax. Попробуйте это:

var origname = $('#NameDiv').find('input[name="myName"]').first().val(); 
var newname = $('#NameDiv').find('input[name="updatedName"]').first().val(); 
$.ajax({ 
    url: 'Home/ChangeName', 
    type: "POST", 
    data: $("#form1").serialize() + "&origname =" + origname + "&newname =" + newname, 
    success: function (result) { success(result); } 
}); 
+0

. Я также попробовал ваше предложение, и Im получил те же результаты. Оба строковых значения равны нулю, когда код достигает ActionResult. – HendPro12

+0

В этом случае убедитесь, что вы правильно читаете значение origname и newname с помощью jQuery. Возможно, что селектор u r, используемый для получения этих значений, возвращается к значению. Это работает для меня очень хорошо. –

+0

Я не уверен, что я вас понимаю, но, как я уже упоминал выше, при отладке в Firebug origname и newname оба показывают правильные значения. Его единственный, когда я добираюсь до ActionResult, которому они передаются, что значения исчезают, а параметры равны нулю. Я считаю, что моя проблема может быть не зная, какой тип содержимого назначить или что он не настроен правильно, чтобы передать несколько типов объектов, например, сборка форм и строки вместе в том же POST. – HendPro12

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