使用ajax调用将Model作为从View到Controller的列表传递

时间:2014-09-30 09:18:44

标签: c# asp.net ajax asp.net-mvc-4

我无法尝试使用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; }
    }

感谢。

4 个答案:

答案 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

UPDATE:

 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帖子提交表单的事件的按钮不应该是提交类型!否则这将永远失败。