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

时间:2016-02-05 08:22:47

标签: javascript asp.net-mvc-5

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

实际上我将参数传递给控制器​​并加载模型,但我会传递整个模型

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

2 个答案:

答案 0 :(得分:9)

你可以吗?是。

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

@Url.Action("Search", "Search", Model)
你想要吗?没有。

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

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

答案 1 :(得分:0)

您可以尝试改为传递ViewBag:

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

控制器:

[HttpGet]
        public PartialViewResult Search(String songId, String songName)
        {