2016-08-08 5 views
0

私はプロジェクトのCMSに取り組んでいます。私はhtmlエディタを使ってページを動的に作成しています。私の達成は私がhtmlページを正常に作成したことです。問題は私がC#を使ってasp.netページを作成し、それはページ2の主要な問題を習得する。Asp.netプロジェクトにasp.netページをプログラムで追加して追加するには?

1 - プロジェクトの一部ではないことを示すローカルホストまたはドメイン上で現在開いていないディレクトリに作成されたページ。

2 - どのように私は現在のディレクトリにある作成されたHTMLページを追加するように、bodytagにmastertextを使用してasp.netページを作成します。

ので、私は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ページに割り当てることを考えています。

+0

私はあなたが必要とするものを理解していれば、あなたはテンプレートとT4でそれをしようとしましたか? VSのデフォルトのテンプレートエンジンです。これは、ページ、コントローラ、および何かテストベースの作成を「プログラム」することができます。私は言語を自動化し、設定やルック&フィール、グリッド作成(私はTelerikの剣道グリッドインデックスページの自動作成)を自動化するために使用します。ちょうど右クリックしてください。 これにチャンスを与えてください:https://msdn.microsoft.com/en-us/library/bb126445.aspx –

+0

しかし、初心者がテンプレートやテンプレートを使ってHTMLまたはASP.NETページを作成し、それを使って –

+0

私は午前いくつかの詳細を含む回答を追加するつもりですか? –

答えて

0

T4は古いASPページと似ています。すべてのそれらの<%>物事でPHPやASPのようなビジュアルベーシックなスクリプトを考えてみてください。彼らは "出力"を作成します。出力はアニーリングとすることができます。しかし、彼らはあなたのプロジェクトへのアクセス権を持っているので、クラスに関するいくつかの情報を利用することができます。だから私はあなたがすでにスクリプト言語でこれをやっている経験があるとします。

あなたは本当にでのチュートリアルに従ってください:[OK]を、行きましょう

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

新しいプロジェクトを作成すると、モデル、ビュー、およびコントローラのディレクトリ(他のもの)があります。 まずモデル内の小さなクラスを作成します。

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()を右クリックし、 "Add View"を選択します(通常、コンテキストメニューの最初または2番目のオプション)。示すように、[OK]をクリックします

enter image description here

(私はスペイン語であるが、データベースコンテキストをクリアしてください)それを埋めます。 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"]を開きます。あなたは、ファイルのリストを参照shouls:先ほど作成したフォルダに、プロジェクトに

Default t4 directory コピーこれらのファイルを([CodeTemplates \ MvcView])

あなたは、コードの作成、HTML、CSHTML、TXTを自動化することができます。 .. あなたが欲しいものならなんでも。私は "リスト"がどのように機能するかを今見せてくれるでしょう。

プロジェクト内で "List.cs.t4"を開きます。間違ったことを修正した場合は、元のファイルをコピーすることができます。

<##の間のすべてがコードであり、実行または評価されます。

いくつかの行を見てみましょう。行番号は多少異なる場合があります。

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

まず1:拡張:我々は(ないVB) 2つ目をscriptoingないためのC#を使用します。それは明らかですよね? 第1:私が使用するいくつかのroutinsがあります。include彼らは(同じディレクトリ内Imports.include.t4) 第四1:それは、ファイルに次のように書き込みます

@Model IEnumerable **SomeGgeneratedCode** 

SomegeneratedCode<#です= "<" + ViewDataTypeName + ">" #>です。言う:だから 書き込み "<" +私のビュータイプ(CarsModel)+の名前 ">"、または[< CarsModel>] が、それはそう、それはあなたのビューのためのあなたのMVCモデルです

@Model IEnumerable<CarsModel> 

を書き込みます。ニース、そう?

さて、先に進んでみましょう。ライン40の周り

<# 
// 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) 

あなたは[<#1 =]

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

を持っている古典的なASPのようなものです。それはダイアログボックスから取得されたViewName変数である "ここに結果を書き込む"というメニュアです。

ライン48:

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

あなたは私のような、いくつかのものを変更することができます。例えば、

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

この子ビュー:)である場合には、ブートストラップボタンのCSSとルートパラメータのIDとスペイン語の異なるリンクを作成すること。このグループではt4はありませんが、ハードコードのパーソナライゼーションだけです!

次の行、53-56では、何をしているのか推測できます。 「主キー」を検索します。我々のモデルはそれを持っていないので、スキップされます。

ライン74:テーブル内に< TD> </TD>と書いてあります。

私はそれを「インデント」します。

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

私はそれが開始するのに十分ですが願っています。 Webアプリケーション(MvcViews)内のそのディレクトリに新しいT4を追加するだけで、 "Add new view"ダイアログで新しいテンプレートとして利用できます。面倒な作業のほとんどを自動化できます。

T4のデバッグは難しいため、毎回小さな変更を加えてテストしてください。 Visual StudioのためのいくつかのT4エディタのシンタックスヘルパーがあります

Tangible syntax highlight Devart editor

私は有形使用されるが、今、私はDevartをしようとします。

あなたのやり方を教えてください。

関連する問題