1

これは、runat="server" を使用して html コントロールをレンダリングするコードの一部です。

 var sb= new StringBuilder();
 sb.AppendLine(" <div class='ItemDiv'>");
 sb.AppendLine(" <h2>More Products </h2>");
 sb.AppendLine("  <span class='separator'></span> <ul class='ulProducts'>");
 foreach (var lead in list)
 {
    var name = lead.ProductName;
    if (name.Length > 17)
    {
       name = string.Format("{0}...", name.Substring(0, 17));
    }
    sb.AppendLine(string.Format("<li><img src='{0}' align='absmiddle' alt='{1}'/> 
                                    <span class='separator'> </span>
                                     <a href='~/Item/{2}/{1}.aspx' runat='server' // issue is with runat='server' 
                                      style='font-size:8pt; text-transform:                      
                                      capitalize;'>{1}</a></li>", 
                                lead.ProductImagePath, name,lead.Id));
 }
 sb.AppendLine("</ul> </div>");
 ProductsBySame1.GetHtml = sb.ToString(); // ProductsbySame is usercontrol and GetHtml is property of innerHtml of div placed in the usercontrol. That is dynamically populated.

私の出力:

<div id="ctl00_cphMain_ProductsBySame1_ltlProducts"> <div class='ItemDiv'>

 <h2>More Products </h2>

 <span class='separator'></span> <ul class='ulProducts'>

<li><img src='Uploads/Images/8e4c426aa1464af0b45f43c8c773e8ae.jpg' align='absmiddle' alt='Ceftriaxone Injec...'/> <span class='separator'> </span><a href='~/Item/659/Ceftriaxone Injec....aspx' **runat='server'**  style='font-size:8pt; text-transform: capitalize;'>Ceftriaxone Injec...</a> </li>

<li><img src='Uploads/Images/9efa7b61cf9f467393089ca111fc5f51.jpg' align='absmiddle' alt='Clavulanate Potas...'/> <span class='separator'> </span><a href='~/Item/660/Clavulanate Potas....aspx' **runat='server'**  style='font-size:8pt; text-transform: capitalize;'>Clavulanate Potas...</a> </li>

</ul> </div>

</div>

上記を参照。実際、私は UrlRewriting.Net モジュールを使用して URL を書き換えています。また、ドキュメントによると、 ~/ で始まるリンクのみが機能します。したがって、~/ は runat='server' でのみ機能するため、URL を構築しています。

最後に私の問題は、レンダリング中に runat='server' が解決されないため、上記の href が機能しないことです。私の使用シナリオに従って、 html のレンダリング中に私を助けてください。

前もって感謝します。

4

3 に答える 3

3

デザイナーからコントロールを追加するとrunat="server"、Visual Studio はそのコントロールのオブジェクトを.designer.csファイルに作成します。したがって、コントロールはマークアップとコード ビハインドの両方で定義されます。サイトを動的に構築している場合、Page要素にオブジェクトはありません。

PageinCreateChildControlsメソッドにコントロールを追加することをお勧めします。このようなもの:

Page.Controls.Add(new Hyperlink() { Url="http://www.example.com" });
于 2012-04-25T21:19:10.103 に答える
2

RepeaterHTML を最初から作成する代わりに、コントロールを使用するだけです。

<asp:Repeater ID="MyRepeater" runat="server">
    <HeaderTemplate>
        <div class="ItemDiv">
            <h2>More Products </h2>
            <span class='separator'></span>
            <ul class='ulProducts'>
    </HeaderTemplate>

    <ItemTemplate>
        <li>
            <img src="<%...%>" align="absmiddle" alt="<%...%>" /> 
            <span class='separator'> </span>
            <a href="<%...%>" runat="server" style="font-size:8pt; text-transform:capitalize;"><%...%></a>
        </li>
    </ItemTemplate>

    <FooterTemplate>
            </ul>
        </div>
    </FooterTemplate>
</asp:Repeater>

(バインド用のダミー プレースホルダーを追加)

于 2012-04-25T21:32:04.450 に答える
1

runat="server" は、aspx マークアップをクラスにコンパイルするときに作成するオブジェクトをコンパイラに伝えるためだけに存在します。コンパイル済みのコントロールのテキスト プロパティを設定しているので、追加のコンパイルは行われません。

于 2012-04-25T21:25:30.277 に答える