我无法尝试使用ajax调用发送我的整个模型List<Account>
。
提供以下代码:
@model List<ValidationAccount>
<input type="button" id="SubmitAccounts" value="Final Proceed">
$("#SubmitAccounts").click(function () {
$.ajax({
url: '/setupAccounts/ActivateAccounts',
type: 'POST',
contentType: 'application/json; charset=utf-8',
cache: false,
dataType: 'json',
data: JSON.stringify(Model),
success: function (data) {
$(body).html(data);
}, error: function (data) {
}
});
});
我尝试使用简单的模型和 @Model ,但不起作用。在这种情况下我该怎么办? (所以我想传递数据我的模型(我的列表))。
更新
方法签名:
[HttpPost]
public string ActivateAccounts(List<ValidationAccount> Accounts)
{
return "Success";
}
更新2
我的模特:
public class ValidationAccount
{
public string Faculty { get; set; }
public string Programme { get; set; }
public string Year { get; set; }
public string Email { get; set; }
}
感谢。
答案 0 :(得分:1)
使用@Model
将返回集合的名称,例如"System.Collections.Generic.List[YourAssembly.ValidationAccount]"
,而不是集合中的对象。您可以将集合序列化为ViewBag,然后将其发回(未经测试),但似乎无论如何都会以不必要的性能来发送数据。
相反,您可以在会话中存储来自Proceed
方法的过滤结果,并使用ActivateAccounts
方法检索它,以避免发回任何内容。
答案 1 :(得分:0)
这样做:
data: { Accounts: JSON.stringify('@Model') }
并将traditional
属性设置为true
:
data: { Accounts: JSON.stringify('@Model') },
traditional:true
var accounts= { Accounts: '@Model' };
和
$.ajax({
type: 'POST',
url: '/{controller}/{action}',
cache: false,
data: JSON.stringify(accounts),
dataType: 'json',
contentType: 'application/json; charset=utf-8'
});
答案 2 :(得分:0)
您必须首先将数据解析为json
尝试
var parsedData = @Html.Raw(Json.Encode(Model)); // This will change the model to json
然后将parsedData
传递给ajax调用
$("#SubmitAccounts").click(function () {
$.ajax({
url: '/setupAccounts/ActivateAccounts',
type: 'POST',
contentType: 'application/json; charset=utf-8',
cache: false,
dataType: 'json',
data: parsedData,
success: function (data) {
$(body).html(data);
}, error: function (data) {
}
});
});
希望这会有所帮助。
答案 3 :(得分:0)
将整个模型传递回控制器方法的最佳方法是序列化表单,如下所示......
$(document).ready( function() {
var form = $('#Form1');
$('#1stButton').click(function (event) {
$.ajax( {
type: "POST",
url: form.attr( 'action' ),
data: form.serialize(),
success: function( response ) {
console.log( response );
}
} );
} );
}
注意:您用来触发导致通过ajax帖子提交表单的事件的按钮不应该是提交类型!否则这将永远失败。