在ASP.NET MVC 5中是否可以在/ Views / Shared目录中动态创建部分视图(cshtml)? 我遇到一种情况,人们将以字符串形式上传一堆HTML,并认为将它们存储在文件系统上会更好。
它像创建一个新文件,蒸一个字符串并保存一样简单吗?
您将如何存储文件名? 您正在使用数据库吗?
对的,这是可能的
只需使像DynamicView.cshtml这样的视图
@model DynamicView
@Html.Raw(Model.HTMLString)
现在,您将用于存储HTML和指向它的指针的方法是另一回事了。您可以将经过清理的HTML存储在数据库中,并通过调用Controller来检索它,例如
public ActionResult DynamicView(ind id)
{
DynamicView model = new DynamicView();
DynamicView.HTMLString = dbContext.HTMLViews.Where(v => v.id == id);
return View(model);
}
如果您希望将提交的HTML写入文件,则可以执行
public ActionResult DynamicView(string filePath)
{
DynamicView model = new DynamicView();
DynamicView.HTMLString = ...code that reads file
return View(model);
}
参见此相关文章编写/输出未转义的HTML字符串
看起来您已经阅读了相关信息。我希望避免使用数据库。我担心将文件写入文件系统。似乎编写HTML可能很简单,但是编写CSHTML可能会遇到一些障碍(例如,已编译视图与未编译视图)。我想如果我只是写HTML块,它应该和System.IO.File一样容易。
我需要创建将从数据库生成的顶部菜单。我做了很多尝试,使用局部视图来创建它。但是我发现大多数情况下,局部视图用于静态内容。最后,我喜欢了一些有用的教程,请找到以下内容,希望对您有所帮助。
单击此处查看如何创建动态局部视图
快速解答:否(您不能/不应在运行时修改Views文件夹。)
ASP.NET MVC视图和共享视图旨在进行编译和运行。建议不要在应用程序运行时对其进行修改或添加新的建议,也不建议这样做。
更有意义的是,您将上传的html blob存储在数据库,文件系统,存储blob(云)中。然后对您的"共享视图"或"特定视图"进行编码,以根据所登录的用户从存储的位置检索特定的html blob。
MVC中有很多扩展功能,使您可以在视图中插入部分html。看一下PartialExtensions作为起点。
OP正在询问是否可能。您只是在说什么是明智的。
@AmmarCSE OP询问您是否可以动态地(在应用程序运行时)对Views文件夹执行IO。尽管投票否决,我还是要重申。修改Views文件夹,web.config或任何可能触发asp.net重新编译的东西都不是明智的选择。 Asp.net MVC强调约定。将任意用户提供的html blob与已发布的代码混合不是惯例。您提供的解决方案还避免在运行时修改Views文件夹。所以我不确定您的分歧源自何处。
对不起,我误会了你的答案。顺便说一句,我无法撤消我的弃权票,因为它告诉我它已被锁定,除非您编辑答案。您可以快速编辑以便撤消我的否决票吗?
谢谢。我已经弄清(限定)了我的答案。