将列表<Object> 从 Razor 视图传递到 Post 操作

Pass List<Object> from Razor View To Post Action

我有这样的模型视图:

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

在 Index 操作(用作 HTTPGet)中,我填写 ContactHomePage 并传递给视图,在视图中,我想将此模型传递给操作 GetRecords,此 post 像这样的动作:

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

和我的 ajax post url 像这样:

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

在 运行 应用程序中,query 处于字符串模式的对象具有其数据,但类型为 List 的 sqlParameters 没有任何值! 现在我的问题是,post List<Object> 如何从 razor view 到 post action?

如果您的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);

     // ...
}