8

つまり、php'h include のように...

何かのようなもの

my_file_to_be_included = "include_me.asp"

-- >

私がこれまで見てきたことについては、いくつかの選択肢がありますが、それらのすべてに何らかの欠点があります...

私が理解しようとしているのは、柔軟なテンプレート システムを作成する方法です...全体を単一のファイルに静的に含める必要はありません...

ここにいくつかのリンクがあります

FileSysmemObject を使用したソリューションで、静的ページを含めることができます

同上

もう一つ

adobeの同じもの

このアプローチは Server.Execute を使用します

しかし、回避したいいくつかの欠点があります...(まだ試していません)Server.Executeコードは別のコンテキストで実行されるため、それを使用して、使用する予定の関数をロードすることはできません発信者コード...厄介な...

同じこと

こっちも同じだと思う

これは有望に見えます!!!

私はそれについて確信が持てません(まだテストできませんでした)が、これはSSDIコンポーネントへのページを動的に処理しているようです...

何か案が???

4

6 に答える 6

7

いいえ、動的なインクルードを行うことはできません。

これでのあなたのベストショットは、server.execute であり、Session 変数を介して必要な状態を渡します:-

Session("callParams") = BuildMyParams() 'Creates some sort of string
Server.Execute(my_file_to_be_included)
Session.Contents.Remove("callParams")
于 2009-01-26T11:55:21.237 に答える
2

改良版 (v2.0):

<%
' **** Dynamic ASP include v.2.0

function fixInclude(content)
   out=""   
   if instr(content,"#include ")>0 then
        response.write "Error: include directive not permitted!"
        response.end
   end if     
   content=replace(content,"<"&"%=","<"&"%response.write ")   
   pos1=instr(content,"<%")
   pos2=instr(content,"%"& ">")
   if pos1>0 then
      before= mid(content,1,pos1-1)
      before=replace(before,"""","""""")
      before=replace(before,vbcrlf,""""&vbcrlf&"response.write vbcrlf&""")
      before=vbcrlf & "response.write """ & before & """" &vbcrlf
      middle= mid(content,pos1+2,(pos2-pos1-2))
      after=mid(content,pos2+2,len(content))
      out=before & middle & fixInclude(after)
   else
      content=replace(content,"""","""""")
      content=replace(content,vbcrlf,""""&vbcrlf&"response.write vbcrlf&""")
      out=vbcrlf & "response.write """ & content &""""
   end if
   fixInclude=out
end function

Function getMappedFileAsString(byVal strFilename)
  Dim fso,td
  Set fso = Server.CreateObject("Scripting.FilesystemObject")
  Set ts = fso.OpenTextFile(Server.MapPath(strFilename), 1)
  getMappedFileAsString = ts.ReadAll
  ts.close  
  Set ts = nothing
  Set fso = Nothing
End Function

execute (fixInclude(getMappedFileAsString("included.asp")))
%>
于 2011-07-19T17:25:20.573 に答える
1

確かに、 REAL classic asp dynamic includesを実行できます。私はこれをしばらく前に書きましたが、これにより Classic ASP がまったく新しい方法で開かれました。人々はそれが不可能だと思っているように見えますが、それはあなたが求めていることを正確に行います!

どんな問題でも私に知らせてください。

于 2009-06-17T19:38:50.440 に答える
0

追記として。動的インクルードを使用しているページの上部に奇妙な ASCII 文字が表示されていたので、ADODB.Stream オブジェクトを使用してインクルード ファイルを読み取ることで、この問題が解消されることがわかりました。

したがって、 getMappedFileAsString 関数の更新されたコードは次のとおりです。

Function getMappedFileAsString(byVal strFilename)
  Dim fso
  Set fso = CreateObject("ADODB.Stream")

  fso.CharSet = "utf-8"
  fso.Open
  fso.LoadFromFile(Server.MapPath(strFilename))

  getMappedFileAsString = fso.ReadText()

  'Response.write(getMappedFileAsString)
  'Response.End

  Set fso = Nothing
End Function
于 2013-06-07T18:22:29.980 に答える
0

私は従来の ASP には少し慣れていませんが、このServer.Executeメソッドを使用して別の ASP ページを読み込んでから、呼び出しページを実行し続けることができると確信しています。15Seconds には基本的なことがいくつかありました。

于 2009-01-26T11:57:31.747 に答える
0

動的インクルードを使用できると便利な Web サイトを構築しています。サイトはすべて ajax であり (ページのリロードはまったくありません)、純粋なデータの JSON を返す呼び出しには必要ありませんでしたが、アプリケーションのサブパーツ (ウィンドウ/ペイン/エリア/フォームなど) ごとに異なる html コンテンツがすべて含まれています。別のファイルにあるのが最善のようです。

私の最初のアイデアは、ajax 呼び出しを「中央ハブ」のメイン ファイル (最初にアプリケーションを起動する) に戻して、どのサブファイルを含めるかを知ることでした。単純にすべてのファイルを含めるだけでは、サイト全体のすべての ASP コードを解析する必要がある可能性がある小さな断片を呼び出すたびに、実行できなくなりました。また、Execute メソッドの使用は、速度とメンテナンスの両方の点で良くありませんでした。

想定される「子」ページをメインページにし、それぞれに「中央ハブ」ファイルを含めることで問題を解決しました。基本的に、これは JavaScript のラウンドトリップ インクルードです。

Web ページの全体的な考え方は、サーバーが「次のページ」に対するクライアントの要求に常に応答することであるため、これは見かけよりもコストがかかりません。要求されているコンテンツは、呼び出されているページによってスコープで定義されます。

これの唯一の欠点は、アプリケーションの「Web ピース」が部分的に分割されて存在しなければならないことです。ほとんどのコンテンツは実際の名前の .asp ファイルにありますが、それらの構造と関係はメインの .asp ファイルで定義されています (たとえば、1 つの Web ピースのメニュー項目が、別の Web ピースを呼び出すまたはロードするために使用する名前と、そのロードを行う方法を知っていること)。ただし、ある意味では、これは、各ページが他のすべてのページをロードする方法を知っている必要がある従来のサイトよりも優れています. これで、「この部分を(ページ全体であろうとなかろうと)ロードしたい方法でロードする」などのことができます。

また、各パーツが独自の javascript と css を持つことができるように設定しました (そのパーツのみが必要な場合)。次に、それらのファイルは、その部分が最初に読み込まれたときにのみ、javascript を介して動的に含まれます。その後、パーツが繰り返しロードされても、余分なオーバーヘッドは発生しません。

于 2010-10-18T23:41:31.437 に答える