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

时间:2016-08-08 16:17:11

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

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

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

2 - 如何使用主页programaticaly创建asp.net页面,以便在其body标签中我将添加位于当前目录中的创建的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());

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

1 个答案:

答案 0 :(得分:0)

T4就像旧的asp页面。想象一下像php或asp这样的脚本在visual basic上的所有&lt; %%&gt;的东西。他们创造了一个&#34;输出&#34;。比输出可以是任何。但是,他们可以访问您的项目,因此他们可以在您的课程中使用一些信息。所以我认为你已经有了一些使用任何脚本语言的经验。

您应该遵循以下教程:

[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()并选择&#34;添加视图&#34; (通常是上下文菜单上的第一个或第二个选项)。如图所示填写(我的是西班牙语,但一定要清除数据库上下文)

enter image description here

单击“确定”。 T4将为您创建一个视图。太棒了吧?

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

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

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

打开[&#34; C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ Extensions \ Microsoft \ Web \ Mvc \ Scaffolding \ Templates \ MvcView&#34;在资源管理器中。你会看到一个文件列表:

Default t4 directory 将这些文件复制到我们刚创建的文件夹中的项目中[[CodeTemplates \ MvcView])

您可以自动创建代码,html,cshtml,txt ......您想要的任何内容。我现在将展示&#34; List&#34;的工作原理。

打开&#34; List.cs.t4&#34;在你的项目内。如果您修改了任何错误,可以复制原始文件。

&lt; ##&gt;之间的所有内容是代码,将被执行或评估。

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

<#@ 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 &lt;#= &#34;&lt;&#34; + ViewDataTypeName + &#34;&gt;&#34;的#&GT; 即可。说: 写&#34;&lt;&#34; +我的视图类型的名称(CarsModel)+&#34;&gt;&#34;或[&lt; CarsModel&gt;] 所以,它写了

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

[&lt;#=]就像经典ASP一样。它menas&#34;在这里写结果&#34;,即ViewName变量,它也取自对话框。

第48行:

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

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

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

这将创建一个不同的链接,用西班牙语,一个按钮的bootstrap css和一个route参数的id,如果这是一个子视图:)。这个组中没有t4,只是硬编码个性化!

下一行,53-56,你可以猜到正在做什么。它搜索&#34;主键&#34;。我们的模型没有它,因此将被跳过。

第74行:写作&lt; TD&gt; &LT; / TD&gt;在桌子里面。

我会&#34;缩进&#34;它适合你。

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

所以,这里它会遍历我们模型的属性,并为每个成员创建一个行标题。 如果你看到,在&lt; ##&gt;之间代码和&lt;#=#&gt;之间的代码去&#34;写&#34;或输出。在第88行:

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

所以,让我们说我们正在写作&#34; Speed&#34;柱。它会写

Html.DisplayFor(modelItem => item.Speed)

我希望它足够好开始。只需将新T4添加到您的Web应用程序(MvcViews)中的该目录中,它就可以作为新模板在&#34;添加新视图&#34;对话。你可以自动完成大部分繁琐的工作。

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

Tangible syntax highlight Devart editor

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

告诉我你是怎么做的。