加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 07:14:00 所属栏目:asp.Net 来源:网络整理
导读:您将如何在ASP.NET MVC视图中支持外部可组合部分? 这是什么意思?想想“每个页面上的登录框”或“iGoogle”.这些东西需要位于每个控制器/视图外部的某些位置. 一种方法是在视图中添加组件,如下所示: % foreach (var component in GetComponents()) {% %= H
您将如何在ASP.NET MVC视图中支持外部可组合部分?

这是什么意思?想想“每个页面上的登录框”或“iGoogle”.这些东西需要位于每个控制器/视图外部的某些位置.

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

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

在上面的示例中,我正在寻找一种方法,让每个组件的控制器提供viewname和viewdata,而不是显示它们的视图的控制器.您可以建议的任何完全不同的解决方案也会引起关注.过滤器,WebForms等

更新:我会试着用一个例子来解释我想要解决的问题.我会选择登录功能.

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

从我目前对ASP.NET MVC样式的理解来看,首先接受请求的控制器将检索适当的数据并将其传递给视图,然后视图将其传递给登录部分视图.登录视图将定义一个表单,其后置操作指向登录控制器的登录操作.登录操作使用发布的信息,我们可以选择使用一些漂亮的方案将请求传递给原始控制器.

我假设有一种比上面更聪明的方法,不需要我将控制器逻辑放在视图/母版页中.

解决方法

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

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

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

关于这种方法的问题在于你需要有逻辑来说明何时将获取组件所需的所有这些数据,何时不去.

二:

有一个MVC Futures DLL,你可以从here下载.

您引用它,并记得将其命名空间添加到您的web.config,然后您应该能够说:Html.RenderAction(“blah”) – 此方法通过联系控制器,启动视图和返回HTML.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读