• ASP.NET MVC 动态选择VIEW


    若要在 ASP.NET MVC 中创建视图,通常是调用一个使用模型来准备视图数据的操作方法。 然后,该操作方法调用控制器的 View 方法来创建视图。 但是,您可能要调用不同的操作方法来创建视图的不同部分。 例如,假定有一个网页要显示最新新闻、天气和体育资讯。 在这种情况下,可能需要一个操作方法来处理新闻,一个处理天气,另一个则处理体育资讯。 这样,您就可以在不同的条件下呈现不同的视图,或将复杂的视图分解成若干个更小、更易于管理的小块。

    本主题描述了如何从创建视图的子部分(子视图)的视图(父视图)中调用操作方法。

    父视图和子视图


    父视图是一个包含对返回子视图的操作方法的调用的视图。 父视图包含所呈现的页的大多数 HTML。 子视图只包含视图的一个部分所需的标记。

    例如,创建列表的子视图可能只包含列表的 HTML,如以下示例所示:

    <ul>
      <li>Item 1</li>
      <li>Item 2</li>
      <li>Item 3</li>
    </ul>

    所有其他标记(正文、标题等)都将包含在父视图中。

    调用操作和用于呈现子视图的 RenderAction 帮助器方法


    ASP.NET MVC 提供了 HTML 帮助器方法(扩展方法),这些方法可呈现大多数类型的 HTML 元素(例如窗体和链接),并简化了一些常规任务(如输入验证)。 用于呈现子视图的 HTML 帮助器有两个:ActionRenderAction。 这些 HTML 帮助器位于 ChildActionExtensions 类中。

    Action 方法将子视图以字符串的形式返回,然后可以直接呈现它。 RenderAction 方法就地呈现子视图。

    例如,假设您有一个名为 ChildList 的子视图,它由上一节中显示的 HTML 组成。 控制器包含以下用于呈现子视图的操作方法:

    public ActionResult ChildList()
    {
        return View();
    }

    请注意,在控制器中,没有用于呈现父视图或子视图的特定方法。 您首先呈现父视图,父视图然后呈现所需的子视图。

    若要调用操作方法并在父视图中呈现子视图,既可以使用 Action 帮助器方法,也可以使用 RenderAction 帮助器方法,如以下示例中所示:

    // One alternative (renders a string)
    <%= Html.Action("ChildList") %>
    
    //Another alternative (renders in place)
    <% Html.RenderAction("ChildList"); %>

    请注意,由于 Html.Action 帮助器方法返回一个字符串,所以等号 (=) 是必需的。

    将参数传递给帮助器方法


    可以从父视图中的多个地方调用相同的操作方法,并向其传递参数以指定要呈现的内容。 ActionRenderAction 都具有接受一个对象的方法重载,该对象包含参数名称和值对。 下面的示例演示了调用 Display 操作方法的 RenderAction 方法的标记。 在这种情况下,此标记传递包含子视图的名称的值的匿名对象,以便呈现相应的部分。 此标记呈现一个“news”部分并紧随其后呈现“weather”部分。

    <% Html.RenderAction("Display", new { section = "News" }); %>
    <% Html.RenderAction("Display", new { section = "Weather" }); %>

    Display 操作方法可能与下面的示例类似:

    public ActionResult Display(string section)
    {
        return View(section);
    }

    从其他的控制器或区域调用操作方法


    可以调用位于除当前控制器以外的控制器中的操作方法。 若要执行此操作,可调用 RenderAction 方法的重载,此方法允许您指定要使用的操作方法和控制器的名称。下面的示例演示了调用 SectionController 类的 Display 操作方法的标记。 第一个参数(字符串)是操作方法的名称,第二个参数(也是字符串)是控制器的名称。

    <% Html.RenderAction("Display", "Section"); %>

    如果您需要的操作方法位于其他区域中,则可以如下所示在一个对象中传递该区域名称:

    <% Html.RenderAction("Display", new { area = "Navigation" }); %>

    通过使用 RenderAction 方法的不同重载,还可调用不同区域中的不同控制器。

    因为MSDN的文章标题不够直接所以内容没有变,只是改了一下标题方便大家查询:

    转自:http://msdn.microsoft.com/zh-cn/library/ee839451.aspx

  • 相关阅读:
    python 发包爬取中国移动充值页面---可判断手机号是否异常
    python利用selenium和safari浏览器驱动实现新浪微博自动点赞 Demo
    Django学习报错记录
    nginx和tomcat的区别
    Mac主机映射到域名
    mac下eclipse安装svn插件-subclipse
    移动端——等分,居中
    移动端——重置样式
    M端页面-绝对定位布局
    jquery-练习-折叠效果
  • 原文地址:https://www.cnblogs.com/jiguixin/p/1921074.html
Copyright © 2020-2023  润新知