从Razor View到Post Action传递List <object>

时间:2018-05-23 07:23:54

标签: asp.net-mvc razor asp.net-core asp.net-ajax

我的模型视图如下:

public class ContactHomePage
{
    public string Query { get; set; }
    public List<SqlParameter> SqlParameters { get; set; }
}

在Index操作(作为HTTPGet)中,我填充ContactHomePage并传递给View,在视图中,我想将此模型传递给action GetRecords,这样的帖子操作如下: / p>

public async Task<IActionResult> GetRecords(JqGridRequest request, string query, List<SqlParameter> sqlParameters)
{
}

和我的ajax帖子网址是这样的:

url: '@Url.Action("GetRecords", "Contact", new { query = Model.Query, sqlParameters = Model.SqlParameters})'

在运行应用程序时,处于字符串模式的query对象有其数据,但类型为List的sqlParameters没有任何值! 现在我的问题是,如何从剃须刀视图发布List<Object>到发布操作?

1 个答案:

答案 0 :(得分:1)

如果您的ActionResult是Get类型,则无法发送复杂数据类型。解决方案是使用 Newtonsoft.Json.JsonConvert 将您的复杂对象(Model.SqlParameters)转换为字符串,然后在ActionResult上将其解析为您的对象。像这样:

在剃须刀视图中( Newtonsoft.Json.JsonConvert.SerializeObject ):

@Url.Action("MyActionResult", "MyController", new { objectStringfied = Newtonsoft.Json.JsonConvert.SerializeObject(new List<MyObject>()) })

在控制器( Newtonsoft.Json.JsonConvert.DeserializeObject ):

public virtual ActionResult MyActionResult(string objectStringfied)
{
     List<MyObject> model = Newtonsoft.Json.JsonConvert.DeserializeObject<List<MyObject>>(objectStringfied);

     // ...
}