【问题标题】:How to create and add asp.net page programmatically to Asp.net project?如何以编程方式创建 asp.net 页面并将其添加到 Asp.net 项目?
【发布时间】:2016-08-08 16:17:10
【问题描述】:

我正在开发一个项目 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 来实现?是VS默认的模板引擎。它允许您“编程”页面、控制器和任何基于测试的创建。我用它来自动化语言和外观设置,甚至是网格创建(我自动化了 Telerik 的 Kendo Grid 索引页面创建)。只需右键单击新建即可。给这个机会:msdn.microsoft.com/en-us/library/bb126445.aspx
  • 但是没有关于初学者如何使用该模板开始和制作 HTML 或 ASP.NET 页面的教程
  • 我要添加一个包含一些细节的答案,好吗?

标签: c# asp.net .net asp.net-mvc content-management-system


【解决方案1】:

T4 就像旧的 asp 页面。在 Visual Basic 上使用诸如 php 或 asp 之类的脚本来考虑所有这些 的东西。他们创造了一个“输出”。比输出可以是任何东西。但是,他们可以访问您的项目,因此他们可以使用您的课程的一些信息。所以我假设你已经有一些这样做的经验,在任何脚本语言上。

您真的应该遵循以下教程:

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

好的,我们走吧。

当您创建一个新项目时,您有一个模型、一个视图和一个控制器的目录(以及其他目录)。 首先在 Model 中创建一个小类:

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);
}

现在,编译。右键单击 MyList() 并选择“添加视图”(通常是上下文菜单上的第一个或第二个选项)。如图填写(我的是西班牙语,但一定要清除数据库上下文)

单击确定。 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.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 + ">" #>。说: 写“”,或者[] 所以,它写了

@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>

[

第 48 行:

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

你可以改变一些东西,比如我。例如,

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

这将创建一个不同的链接,用西班牙语,一个按钮的引导 css 和一个路由参数的 id,以防这是一个子视图:)。该组中没有 t4,只是硬编码个性化!

接下来的 53-56 行,你可以猜到在做什么。它搜索“主键”。我们的模型没有它,所以将被跳过。

第 74 行:正在将

写入一个表中。

我会为你“缩进”它。

@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>
}

所以,它在这里遍历我们模型的属性并为每个成员创建一个行标题。 如果您看到,在 之间是代码,而在 之间是“写入”或输出。第 88 行:

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

所以,假设我们现在正在编写“速度”列。它会写

Html.DisplayFor(modelItem => item.Speed)

我希望它足以开始。只需将新的 T4 添加到您的 Web 应用程序 (MvcViews) 中的该目录中,它将在“添加新视图”对话框中作为新模板提供。您可以将大部分繁琐的工作自动化。

T4 很难调试,所以每次都做些小改动并进行测试。 Visual Studio 有一些 t4 编辑器语法助手:

Tangible syntax highlight Devart editor

我使用了 Tangible,但现在我将尝试 Devart。

告诉我你是怎么做的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多