0

私はC#を初めて使用し、sitecoreを使用してプロジェクトに取り組んでいます

私はちょうどaspxページを追加しました

.aspxファイル

 <sc:sublayout runat="server" renderingid="{7ACDFB04-E9C9-4AC4-BDC6-6F3FF0862199}" path="/layouts/FSB/Header.ascx" id="HeaderFixed"></sc:sublayout>
    <sc:placeholder runat="server" key="layout" id="templatePage"></sc:placeholder>
    <sc:sublayout runat="server" renderingid="{621A56F6-9948-4661-9F33-3AFEF1DE698D}" path="/layouts/FSB/Footer.ascx" id="FooterFixed"></sc:sublayout> 

.csファイル

 Control templateControl = LoadControl("templateLandingPages/free_template.ascx");
 Control placeHolderControl = Page.FindControl("templatePage");

16行目のブラウザ表示のエラー:

    Illegal characters in path.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

    Exception Details: System.ArgumentException: Illegal characters in path.

Source Error: 

Line 14:    protected void Page_Load(object sender, EventArgs e)
Line 15:    {
Line 16:     Control templateControl = LoadControl("templateLandingPages\free_template.ascx");
Line 17:     Control placeHolderControl = Page.FindControl("templatePage");
4

5 に答える 5

8

あなたがあなたをどのように使うかという単純な問題\。スラッシュ()を2倍にする必要があります\\。最初のものは、2番目のもののエスケープ文字として機能します。

Control templateControl = LoadControl("templateLandingPages\\free_template.ascx");

コメントしたように、次のものも使用できます。

Control templateControl = LoadControl(@"templateLandingPages\free_template.ascx");

文字列リテラルに関するこの記事と、一方の表記をもう一方の表記よりも使用する理由を確認してください。

于 2012-09-20T17:37:19.847 に答える
2

@次のようなパス文字列の先頭に配置@"templateLandingPages\free_template.ascx"

コード:

Control templateControl = LoadControl(@"templateLandingPages/free_template.ascx");

接頭辞「@」を使用すると、キーワードを識別子として使用できます。これは、他のプログラミング言語とのインターフェースに役立ちます。文字@は実際には識別子の一部ではないため、他の言語では、接頭辞なしの通常の識別子として識別子が表示される場合があります。@プレフィックスが付いた識別子は、逐語的識別子と呼ばれます。

于 2012-09-20T17:42:00.447 に答える
2

C#は、通常の文字列リテラルと逐語的な文字列リテラルの2つの形式の文字列リテラルをサポートしています。

http://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx

エスケープを使用するか、逐語的な文字列を使用する必要があります。

var escaped = "templateLandingPages\\free_template.ascx";
var verbatim = @"templateLandingPages\free_template.ascx";
于 2012-09-20T17:43:35.740 に答える
0

C#でパスを使用する場合\\は、ではなくを使用する必要があります\。バックスラッシュをエスケープして、1つのリテラルになるようにします\

于 2012-09-20T17:38:57.960 に答える
0

「パス内の不正な文字」の問題を解決する1つの方法は、「Initialize()」関数呼び出しですべてのメンバー変数のインスタンス化にコメントを付け、コメントを1つずつ解除して、問題が正確にどこにあるかを見つけることでした。お役に立てれば

于 2015-07-31T04:27:32.833 に答える