正在创建具有动态内容的局部视图

本文关键字:局部 视图 动态 创建 | 更新日期: 2023-09-27 18:21:15

我知道,当我创建视图时,除了html和来自模型/控制器的数据之外,我不应该在其中放入任何代码,这就是我迄今为止所做的。

但假设有一个可以在多个视图中使用的动态生成的html片段,我猜这将是项目中共享文件夹中的部分视图。但是,由于它是一个局部视图,没有绝对的控制器来处理动态数据(从数据库)的传播,如果假设局部视图是为table.id=n等动态呈现内容,我将如何调用,以及在哪里对数据从数据库到视图(或模型)的传播进行编码?

我还是一个新手,正在.net上学习教程,试图弄清楚如何做到这一点。有人知道它是怎么做的吗?希望这个问题有道理。

正在创建具有动态内容的局部视图

您总是可以为分部定义一个模型。

您可以从容器视图中渲染部分,通过其模型的一个通常填充的实例:

<!-- index.cshtml -->
<h1>Feed Upload</h1>
<div id="uploader">
        @Html.Partial("~/Views/Shared/Controls/_FileUploader.cshtml", new FileUploaderModel() { UploaderClassName = this.Model.UploaderClassName })
</div>

在这个简单的例子中,我使用@Html.Partial()方法从index.cshtml调用部分_FileUploader.cshtml,传递一个指定UploaderClassName值的新模型实例。

编辑

this.Model.UploaderClassName指的是容器的模型,它在的控制器业务中初始化。当然,容器的控制器可以运行任何数据访问逻辑,从数据库中获取动态数据,并将其传递给分部的模型。

看看MSDN,看看这篇文章。

假设您使用的是剃刀视图引擎,您可以将一个.cshtml文件放在带有辅助函数的App_Code文件夹中。

语法如下:

@helper FormatDate(DateTime date)
{
    @date.ToShortDateString()
}

您这样称呼它(假设文件是Utility.cshtml)

@Utility.FormatDate(Patient.DOB)

因为可以将参数传递给辅助对象,所以可以传递所需的任何类型,包括复杂对象。

我最近发布了一个nuget包来做这件事。它被称为动态MVC。

http://dynamicmvc.com

您可以在codeplex上查看源代码。

https://dynamicmvc.codeplex.com

我这样做的方法是使用MVC中内置的ModelMetadata引擎,使我能够以弱类型的方式获取任何属性的值。ModelMetadata引擎最初来自ASP.net动态数据,并在MVC2中移植到MVC。它对这种情况非常有效。