【问题标题】:Pass List<Object> from Razor View To Post Action从 Razor 视图传递 List<Object> 到 Post Action
【发布时间】:2018-11-02 01:57:48
【问题描述】:

我有这样的模型视图:

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

在索引操作(用作 HTTPGet)中,我填写 ContactHomePage 并传递给 View,在视图中,我想将此模型传递给操作 GetRecords,此发布操作如下:

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&lt;Object&gt; 以发布操作?

【问题讨论】:

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


    【解决方案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);
    
         // ...
    }
    

    【讨论】:

    • 我收到此错误:Message = "Error conversion value \"@FirstName\" to type 'System.Data.SqlClient.SqlParameter'。路径'[0]',第 1 行,位置 13。 "
    • 我认为 Newtonsoft 在 De-serialize List 中存在问题,我将 List 替换为 List,它工作正常!
    • 您可以创建一个aux数据类型,然后将其映射到sql参数数据类型。此外,您的 stringfied 参数不应太长,因为通常请求具有限制大小。否则将请求更改为 HttpPost 类型。最后...如果我的回答对您有帮助,请不要忘记投票;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    相关资源
    最近更新 更多