【发布时间】:2016-07-22 03:09:38
【问题描述】:
我有一个 View,它是 PartialView 的容器。假设客户 - 订单关系。 View 应该收到一个CustomerViewModel,而 PartialView 应该收到一个 Orders 的集合,例如 IEnumerable<OrderViewModel>。
我基本上有两种方法(更不用说 Angular),Razor 或 jQuery。通过使用@Html.Partial("_CustomerOrdersPartial", Model.Orders),Razor 非常简单。但是让我们假设我不能使用 Razor 语法,这就是我最终发布这个问题的方式。我已经阅读了很多关于这个问题的帖子,但是其中大多数(更不用说全部)建议使用$("#container").load('@Url.Action("ActionName", new { parameterX = valueY }))。然后是我的问题:
- 为什么要混合使用 Razor 和 jQuery?
- 这是唯一的方法吗?
- 有什么方法可以调用View并传递模型吗?
最后一个问题与上述代码需要调用服务器端的操作有关,而上面提到的@Html.Partial("_CustomerOrdersPartial", Model.Orders) 只会调用视图(客户端)并发送给定的模型在。
任何关于如何解决这个问题的想法都会非常有帮助。
提前感谢您的时间和想法。
【问题讨论】:
-
因为使用
'@Url.Action()将始终确保您的网址正确生成。 -
@Url.Action本身是一种 Razor 语法,它根据控制器和操作方法生成 URL。请记住,从回调创建的部分视图,无需刷新整个页面。 -
正是斯蒂芬所说的。您的 URL 由 MVC 路由基础结构维护。它的主要目的之一是确保如果您以后想更改 URL,应用程序中只有 1 个位置可以更改。使用
@Url.Action可确保 URL 是从路由生成的,而不是在您的视图中硬编码。 -
@Html.Partial()是服务器端代码,而不是客户端代码。不太确定你在这里问什么。$.load()是客户端代码。为什么你要把你的模型发送到视图,然后再将它原封不动地发送回服务器,以获取基于它的局部视图,或者只是首先渲染它。您通常使用$.load()(或任何 ajax 方法)来响应客户端事件 -
因为
Html.Partial()是服务器端代码。该方法搜索具有匹配名称的视图并将其添加到服务器端正在生成的 html 中。它不需要 url,因为它已经在服务器上。然而,使用.load()是客户端代码。客户端不知道服务器上有什么,除非它调用服务器返回一些东西,而要做到这一点,你需要提供一个 url。
标签: c# jquery asp.net-mvc asp.net-mvc-4 razor