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