2012-09-25 87 views
2

我有一個使用ASP.NET MVC3,AJAX和JQUERY的問題。我有以下功能ASP MVC 3使用AJAX和JQUERY提交網址參數

[HttpPost] 
public bool Update(int id, FormCollection collection) 

這是我的jQuery來源:

$(document).ready(function() { 
    $('#btnUpdate').click(function (e) { 
     // Cancel default action 
     e.preventDefault(); 
     var formCollection = $('#formId').serialize(); 
     $.ajax({ 
      cache: false, 
      type: 'POST', 
      url: '@Url.Action("Action","Controller")', 
      data: { id: $('#id').val(), collection: formCollection }, 
      success: function (data) { 
       alert(data); 
      }, 
      error: function (xhr, ajaxOptions, thrownError) { 
       alert('Error during process: \n' + xhr.responseText); 
      } 
     }); 
    }); 
}); 

成功提交id參數,但集合(的FormCollection)包括帶有{[0]數組:10000, [1]:收集}。我無法解決問題。當我重新設計這樣的解決方案:

[HttpPost] 
public bool Update(FormCollection collection) 

$(document).ready(function() { 
    $('#btnUpdate').click(function (e) { 
     // Cancel default action 
     e.preventDefault(); 
     $.ajax({ 
      cache: false, 
      type: 'POST', 
      url: '@Url.Action("Action", "Controller")', 
      data: $('#formId').serialize(), 
      success: function (data) { 
       alert(data); 
      }, 
      error: function (xhr, ajaxOptions, thrownError) { 
       alert('Error during process: \n' + xhr.responseText); 
      } 
     }); 
    }); 
}); 

一切工作正常。我在傳遞2參數時做錯了什麼?

THX !!!

+0

這種方式不能獲得'FormCollection'你在這裏傳遞模型類的集合定義。比如'public bool Update(int id,userProfile collection)' – Sender

+0

請確定在IE中檢查了這個[是否支持IE 8的JSON.stringify()?](http://stackoverflow.com/questions/3326893/is-json- stringify-supported-by-ie-8) – Sender

回答

1

嘗試在你的JSON調用JSON.stringify():

data: JSON.stringify({ id: $('#id').val(), collection: formCollection }) 
1
$(document).ready(function() { 
    $('#btnUpdate').click(function (e) { 
     // Cancel default action 
     e.preventDefault(); 
     var formCollection = $('#formId').serialize(); 
     $.ajax({ 
      cache: false, 
      type: 'POST', 
      url: '@Url.Action("Action","Controller")', 
      data: JSON.stringify({ id: $('#id').val(), collection: formCollection }), 
      success: function (data) { 
       alert(data); 
      }, 
      error: function (xhr, ajaxOptions, thrownError) { 
       alert('Error during process: \n' + xhr.responseText); 
      } 
     }); 
    }); 
}); 

你應該有與jsonstringify

+0

創建以下錯誤:參數字典包含非空的類型'System.Int32'的空條目'id'... – tmieruch

+0

這意味着您還必須查看您的ID字段 –

+0

或使[HttpPost] 公共布爾更新(int id,FormCollection集合)到[HttpPost] 公共布爾更新(int?id,FormCollection集合) –

0

這是實際的手錶傳遞數據: Debugging

成功提交參數ID(Name = id,Wert = 10000)。在id上方,你可以看到formCollection,包括ajax調用的FORM.serialize()值。但System.Web.Mvc.FormCollection僅包含兩個鍵:id集合!我預計

  1. 「名稱」
  2. 「地址」
  3. 「Address_2」
  4. ...

我想,如果在我的創建Ajax請求得到了一個錯誤,但我不不知道爲什麼...

var customerNo = $('#fieldID').val(); 
var formCollection = $('#formID').serialize(); 
$.ajax({ 
    cache: false, 
    type: 'POST', 
    url: '@Url.Action("Action", "Controller")', 
    data: { id: customerNo, collection: formCollection }, 
    dataType: 'json', 
    success: function (data) { 
     if (data) { 
      alert(data); 
     }; 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     alert('Error during process: \n' + xhr.responseText); 
    } 
}); 

以下行生成錯誤:

data: JSON.stringify({ id: customerNo, collection: formCollection }) 

參數字典包含無效項非可空類型 'System.Int32' 的 '身份證' ...

改變,而不影響:

data: { id: customerNo, collection: JSON.stringify(formCollection) }, 

任何想法?

0

這是我的想法(作品!)

添加在部分類從一個模型的字符串屬性,手動「數據」添加此屬性。

JS:

$.ajax({ 
     cache: false, 
     type: 'POST', 
     url: '@Url.Action("Action", "Controller")', 
     data: $("form").serialize() + "&id=whatever", 
     dataType: 'json', 
     success: function (data) { 
       if (data) { 
         alert(data); 
       }; 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
       alert('Error during process: \n' + xhr.responseText); 
     } 
}); 

partialClass.cs型號:

public partial class TableName 
{ 
    public string id { get; set; } 
} 

控制器:

[HttpPost] 
public bool Update(FormCollection collection){ 
    var ID = collection.id; 
} 

商祺!