代码之家  ›  专栏  ›  技术社区  ›  Jourmand

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

  •  0
  • Jourmand  · 技术社区  · 8 年前

    我有这样的模型视图:

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

    在索引操作(作为httpget工作)中,我填充 ContactHomePage 并传递给视图,在视图中,我想将此模型传递给操作 GetRecords ,此post操作如下:

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

    我的Ajax发布URL如下:

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

    在运行应用程序时, query 处于字符串模式的对象有其数据,但具有类型列表的sqlparameters没有任何值! 现在我的问题是,怎样才能发布 List<Object> 从剃刀的角度到行动后?

    1 回复  |  直到 8 年前
        1
  •  1
  •   CodeNotFound dotnetstep    8 年前

    如果actionResult是get类型,则不能发送复杂的数据类型。解决方案是将复杂对象(model.sqlparameters)转换为字符串,使用 newtonsoft.json.jsonconvert公司 ,然后在actionResult中将其解析为对象。像这样:

    在Razor视图( newtonsoft.json.jsonConvert.SerializeObject ):

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

    AT控制器( newtonsoft.json.jsonConvert.DeserializeObject ):

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