如何以编程方式创建 asp.net 页面并将其添加到 Asp.net 项目?

How to create and add asp.net page programmatically to Asp.net project?

我正在开发一个 CMS 项目,我正在使用 html 编辑器动态创建页面。我的成就是我已经成功创建了 html 页面,现在问题是我坚持到了这一点如何使用 C# 创建 asp.net 页面并将其分配给母版页 2 个主要问题。

1-在当前目录中创建的页面,但未在本地主机或域中打开,表明它不是项目的一部分。

2-如何使用母版页以编程方式创建 asp.net 页面,以便在其正文标记中添加位于当前目录中的已创建 html 页面。

所以告诉我应该如何创建 asp.net 页面并将其也作为项目的一部分并为其分配母版页这是我如何在当前目录中创建 html 页面的代码

        string content = "<!DOCTYPE html><html><header><title>{MY_TITLE}</title></header><body>{body}</body></html>";

        List<string> lines = new List<string>();

        content = content.Replace("{MY_TITLE}", titleTextBox.Text);
        string name = TextBox1.Text;
        content = content.Replace("{body}", Editor2.Content);
        lines.Add(content);
        string nameP = seelctName(Convert.ToInt32(name));
        nameP = nameP.Replace(" ", "");
        File.WriteAllLines(AppDomain.CurrentDomain.BaseDirectory + "\" + nameP + ".htm", lines.ToArray());

但我正在考虑使用链接到母版页的 c# 将此内部内容分配给新创建的 asp.net 页面,并使其成为项目的一部分,意味着在域中打开

T4 就像旧的 asp 页。考虑像 php 或 asp 这样的脚本,在 visual basic 上包含所有这些 <% %> 东西。他们创建了一个 "output"。比输出可以是任何东西。但是,他们可以访问您的项目,因此可以使用您的 classes 上的一些信息。所以我假设您已经有一些使用任何脚本语言的经验。

您应该真正按照以下教程进行操作:

[https://msdn.microsoft.com/en-us/library/bb126445.aspx]

好的,我们走。

当你创建一个新项目时,你有一个模型、一个视图和一个控制器的目录(加上其他)。 首先在 Model:

里面创建一点 class
public class CarsModel
{
  public string Brand {get;set;}
  public string Model {get;set;}
  [Display(Name="Kilometers per hour")]
  public double Speed {get;Set;}
}

在那里输入并打开 HomeController。添加新方法:

public ActionResult MyList()
{
  List<CarsModel> myList = new List<CarsModel>();

  myList.Add( new CarsModel() { Brand = "Ford", Model = "F50", Speed = 150} );
  myList.Add( new CarsModel() { Brand = "Lamborgini", Model = "Countach", Speed = 290} );
  myList.Add( new CarsModel() { Brand = "Mattel", Model = "RedShadow", Speed = 5} );

  return View(myList);
}

现在,编译。 Right-Click on MyList() 和 select "Add View"(通常是上下文菜单中的第一个或第二个选项)。如图所示填写(我的是西班牙语,但一定要清除数据库上下文)

点击确定。 T4 将为您创建一个视图。太好了,对吧?

让我们看看它是如何工作的。

在您的项目中,在 Web 项目的根目录中创建一个 [CodeTemplates] 文件夹。 在里面创建另一个文件夹,[ MvcView ]。您应该以 [ CodeTemplates\MvcView ].

结尾

现在我们将复制 Microsoft 的默认模板,以便您使用它们。

在资源管理器中打开 [ "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web\Mvc\Scaffolding\Templates\MvcView" ]。您应该看到文件列表:

将这些文件复制到您的项目中,在我们刚刚创建的文件夹中 ([CodeTemplates\MvcView])

您可以自动创建代码,html、cshtml、txt...任何您想要的。我现在将展示 "List" 是如何工作的。

在您的项目中打开 "List.cs.t4"。如果修改有误,可以复制原文件过来。

<# #> 之间的所有内容都是代码,将被执行或评估。

让我们检查一些行。行号可能略有不同。

<#@ template language="C#" HostSpecific="True" #>
<#@ output extension=".cshtml" #>
<#@ include file="Imports.include.t4" #>
@model IEnumerable<#= "<" + ViewDataTypeName + ">" #>

第一个:我们将使用 c# 编写脚本(无 vb) 第二个:扩展。很清楚,对吧? 第三个:我将使用一些例程:包括它们(Imports.include.t4 在同一目录中) 第四个:它将以下内容写入文件:

@Model IEnumerable **SomeGgeneratedCode**

SomegeneratedCode<#= "<" + ViewDataTypeName + ">" #>。说: 写“<”+我的视图类型的名称(CarsModel)+“>”,或者[] 所以,它写

@Model IEnumerable<CarsModel>

所以,这是您的视图的 MVC 模型。不错吧?

现在,让我们继续前进。

<#
// The following chained if-statement outputs the file header code and markup for a partial view, a view using a layout page, or a regular view.
if(IsPartialView) {
#>

<#
} else if(IsLayoutPageSelected) {
#>
// Generated code for a page with a layout (which is taken from the "Add View" dialog)

在第 40 行附近

<title><#= ViewName #></title>

[<#=] 就像 classic ASP。它表示 "write result here",即 ViewName 变量,它也取自对话框。

第 48 行:

@Html.ActionLink("Create New", "Create")

你可以改变一些东西,就像我一样。例如,

@Html.ActionLink("Nuevo", "Create", { id = ViewBag.parentId }, new { @class = "btn btn-xs" })

这将创建一个不同的 link,在西班牙语中,bootstrap css 用于按钮和 id 用于路由参数,如果这是 child 看法 :)。该组中没有 t4,只有硬代码个性化!

下一行,53-56,你猜猜是做什么的。它搜索 "primary key"。我们的模型没有它,所以将被跳过。

第 74 行:正在 table.

中写入

我会"indent"给你的。

@foreach (var item in Model) {
        <tr>
    <#
    foreach (PropertyMetadata property in properties) {
        if (property.Scaffold && !property.IsPrimaryKey && !property.IsForeignKey) {
    #>
        <#
                // We do not want to show any association properties for which there is
                // no associated foreign key.
                if (property.IsAssociation && GetRelatedModelMetadata(property) == null) {
                    continue;
                }
        #>
                <td>
                    @Html.DisplayFor(modelItem => <#= "item." + GetValueExpression(property) #>)
                </td>
        <#
        }
    }
    .... more code ...
    </tr>
}

所以,这里它遍历我们模型的属性并为每个成员创建一行 header。 如果您看到,<# #> 之间是代码,<#= #> 之间是 "write" 或输出。第 88 行:

Html.DisplayFor(modelItem => <#= "item." + GetValueExpression(property) #>)

那么,假设我们现在正在编写 "Speed" 专栏。它会写

Html.DisplayFor(modelItem => item.Speed)

我希望它足以开始。只需将新的 T4 添加到您的网络应用程序 (MvcViews) 的该目录中,它将作为新模板在 "Add new view" 对话框中可用。您可以自动执行大部分繁琐的工作。

T4 很难调试,因此每次都进行小的更改并进行测试。 Visual Studio:

有一些 t4 编辑器语法助手

Tangible syntax highlight Devart editor

我用的是 Tangible,但现在我会试试 Devart。

告诉我你的表现。