将列表<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);
// ...
}
我有这样的模型视图:
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);
// ...
}