正在创建具有动态内容的局部视图
本文关键字:局部 视图 动态 创建 | 更新日期: 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。它对这种情况非常有效。