MVC - 将整个模型作为参数传递给 JavaScript 中的 Url.Action

Posted

技术标签:

【中文标题】MVC - 将整个模型作为参数传递给 JavaScript 中的 Url.Action【英文标题】:MVC - Pass entire model as parameter to Url.Action in javascript 【发布时间】:2016-05-15 03:31:53 【问题描述】:

我可以将整个模型作为参数传递给 Url.Action 或类似的吗?

实际上,我向控制器传递了一个参数并加载了模型,但我想传递整个模型。

window.location.replace('@Url.Action("Search", "Search", new  idSong = Model.IDSong )');

【问题讨论】:

你想达到什么目的? 使用不带jquery的ajax发送对象 【参考方案1】:

可以吗。是的。

您可以使用接受object 作为第三个参数的重载传递一个仅包含值类型或string 属性的简单模型

@Url.Action("Search", "Search", Model)

你愿意吗?没有。

在内部,该方法将根据每个属性名称和.ToString() 值创建一个Dictionary,并将其转换为查询字符串。不仅生成的 url 很难看,如果你有很多属性,或者属性的值包含长字符串,你可能会超过查询字符串限制并抛出异常。但主要问题是任何复杂对象或集合的属性都会导致绑定失败,因为例如List<string> 的属性将生成..?somePropertyName=System.Collections.Generic.List[string]&....

现在只传递模型的ID,然后从控制器的存储库中再次获取模型。

【讨论】:

如果我们有其他参数,如 int 和另一个字符串,并且第三个模型创建匿名对象会起作用吗? @EhsanSajjad,不确定我是否理解您的评论,但如果您的意思是您可以使用@Url.Action("Search", "Search", new id = 1, Model ) 回发另一个不属于模型的值,那么您不能(@987654330 @ 成为嵌套对象,并且方法不会递归地为复杂对象生成查询字符串 - 结果将是 ../Search? id=1&Model=someAssembly.someClassName) 那么在这种情况下推荐的方法是什么,如果我们有这种情况 @EhsanSajjad AFAIK 的唯一(内置)选择是为模型的每个属性创建一个匿名对象 - new id = 1, firstName = Model.FirstName, lastName = Model.LastName , .... (我曾经创建了自己的 html.RouteValuesFor() 方法,该方法构建了一个 @987654334 @ 基于模型并进行递归,并且还有一个用于匿名对象的可选参数,可以添加额外的值,但我从未找到它的用途) 你的方法方法看起来不错,但是每次设置每个属性都很痛苦,你可以分享你写的扩展的sn-p吗?【参考方案2】:

您可以尝试传递 ViewBag:

Url.Action("Search", "Song", new  songId = ViewBag.SongId, songName = ViewBag.SongName)

控制器:

[HttpGet]
public PartialViewResult Search(string songId, string songName)


【讨论】:

以上是关于MVC - 将整个模型作为参数传递给 JavaScript 中的 Url.Action的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC:将模型作为参数传递给控制器​​方法VS显式实例化它

模型在使用 C# 将 POST 方法作为参数传递给 ASP.NET MVC 中同一控制器的 GET 方法时获取 NULL

JQuery将'空参数传递给MVC控制器方法

将数组作为参数传递给PHP CodeIgniter中的模型

在 extjs MVC 架构中如何将参数传递给函数

ASP.NET MVC - 将参数传递给控制器