asp.net-mvc - ASP.NET MVC 中的 UI 组合

标签 asp.net-mvc composition

您将如何在 ASP.NET MVC View 中支持外部可组合部件?

我这是什么意思?想想“每个页面上的登录框”或“iGoogle”。这是需要在每个 Controller / View 外部的某些地方的东西。

一种方法是在 View 中添加组件,如下所示:

<% foreach (var component in GetComponents()) {%>
    <%= Html.RenderPartial(component.ViewName, component.ViewData)%>
<%} %>

在上面的示例中,我正在寻找一种很好的方法来让每个组件的 Controller 而不是显示它们的 View 的 Controller 传递 viewname 和 viewdata。您可以建议的任何完全不同的解决方案也会引起人们的兴趣。过滤器、WebForms 等

更新:我将尝试用一个例子来解释我想要解释的内容。我会选择登录功能。

在典型的 webforms 应用程序中,这可能是一个用户控件,它在页面生命周期的加载事件中检索适当的数据并更新一些 UI 控件。单击后,页面将回发,我们可以在同一用户控件中的单击事件中对发布的信息进行操作。

根据我目前对 ASP.NET MVC 风格的理解, Controller 首先接受请求 将检索适当的数据并将其传递给 View ,然后 View 将其传递给登录部分 View 。登录 View 将定义一个表单,其发布操作针对登录 Controller 的登录操作。登录操作使用发布的信息,我们可以选择使用一些漂亮的方案将请求传递给原始 Controller 。

我认为有一种比上述更聪明的方法,不需要我将 Controller 逻辑放在 View /母版页中。

最佳答案

有两种方法可以做到这一点:

一:创建一个BaseController,它总是获取这些组件所需的数据,设置ViewData["loginbox"] = loginBoxData,然后你可以像这样传递它。

<% foreach (var component in GetComponents()) {%>
        <%= Html.RenderPartial(component.ViewName, ViewData[component.Name])%>
<%} %>

这种方法的问题在于,您需要有逻辑来说明何时需要获取组件所需的所有数据,以及何时不获取。

二:

您可以从 here 下载一个 MVC Futures DLL。 .

如果您引用它,并记住将其命名空间添加到您的 web.config,那么您应该可以说:Html.RenderAction("blah") - 此方法通过联系 Controller 、启动 View 并返回 HTML 来完成整个行程。

关于asp.net-mvc - ASP.NET MVC 中的 UI 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/453036/

相关文章:

javascript - angular 2服务注入(inject)问题

java - Java 中的泛型阻止方法调用

mvvm - Durandal : multiple views for one viewmodel

c# - 使用 .Contains 检查字符串是否包含字符时出错

asp.net - 51°.mobi 的替代品?

jquery - 验证 MVC 表单中的复选框

scala - 在 ScalaTest 中组合测试装置的更好方法

function - haskell 帮助.和$

asp.net-mvc - Visual Studio : How to override the default "Build Action" for certain extension types per project or solution?

javascript - 选择所有分页并显示每页结果,同时使用 JQuery 禁用和启用按钮