使用动态内容创建局部视图

时间:2014-09-08 14:38:41

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我理解当我创建一个视图时,除了html和模型/控制器中的数据之外我不应该放任何代码,这是我到目前为止所做的。

但是让我们说有一个可以在多个视图中使用的动态生成的html剪辑,我猜这将是项目中Shared文件夹中的部分视图。但由于它是局部视图,没有绝对的控制器来处理它的动态数据传播(来自db),我将如何调用,以及我将数据从db传播到视图(或模型?)的位置,如果让我们说部分视图是为table.id=n等动态呈现内容

我很擅长新手并在.net中编写教程,试图弄清楚如何做到这一点。有谁知道它是如何完成的?希望这个问题有道理。

3 个答案:

答案 0 :(得分:1)

您始终可以为部分定义模型。

您可以从容器视图中渲染部分,传递其模型的动态填充实例:

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

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

修改

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

查看MSDNthis article

答案 1 :(得分:0)

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

语法如下:

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

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

@Utility.FormatDate(Patient.DOB)

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

答案 2 :(得分:0)

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

http://dynamicmvc.com

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

https://dynamicmvc.codeplex.com

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