2009-04-02 6 views
0

asp.net webformsのボタンコントロールに問題があります。asp.net web-formsコマンドの問題

mvcを使用した後に、私はwebformsのaspxファイルでもforeachを使用し始めました。リピーターの代わりに、リピーターが作成するすべての迷惑ビューステートが原因でした。

これはhtmlコントロールを反復するだけで効果的です。 しかし、私はボタンコントロールで苦労しました。ポストバックで

<% foreach (var r in Reports) { %> 
    <asp:LinkButton OnClick="Click_DeleteResult" CommandArgument='<%= r.ResultId.ToString() %>' runat="server">Delete</asp:LinkButton> 
<% } %> 

そのボタンにcommandargumentは "> <% = r.ResultId.ToString()%" となります。そのコードは実行されません。 このようにコントロールプロパティを設定する良い方法はありますか?

答えて

0

これは醜いです。 ASP.NET(特にMVC)を使用する利点の1つは、ロジックとプレゼンテーションを分離することです。コードを実行するためにaspxファイルを調べなければならないたびに私はうんざりします。

ViewStateの「ジャンク」が気に入らない場合は、そのコントロールでオフにしてください。

<asp:Repeater ID="MyRepeater" runat="server" EnableViewState="false"> 

あなたはこのかかわらずを主張する場合は...私は、周囲の引用符をドロップしない限り、ASP.NETが正しくサーバータグを解析しないと、このような状況を見てきました。これと同じように:

CommandArgument=<%= r.ResultId.ToString() %> 

は完全にHTMLを適合していない可能性がありますが、ASP.NETは気にしません。何らかの理由で周囲の引用符を出力する必要が本当に必要な場合は、それらを外側ではなくサーバータグの内側に置くことができます。これは直感的ではありませんが、時にはそのようにする必要があります。

0

あなたが背後にあるコードを経由して、それを追加することについては、これは迅速かつ汚い例ですが、私はあなたのアイデアを得ると思いますどのようにデータバインディング式に

<%# r.ResultId %> 
-1

を試してみました:

HtmlTable table = new HtmlTable(); 
foreach (var r in Reports) 
{ 
    LinkButton lnkbtn = new LinkButton(); 
    lnkbtn.CommandArgument = r.ResultId; 
    lnkbtn.Click += Click_DeleteResult; 
    HtmlTableRow tr = new HtmlTableRow(); 
    HtmlTableCell tc_resultID = new HtmlTableCell(); 
    tc_caseNo.Controls.Add(lnkbtn); 
    tr.Cells.Add(tc_resultID); 
    table.Rows.Add(tr); 
} 
div_yourContainerDiv.Controls.Add(table); 

私は時々好みますこの解決策は割り当てに依存します。しかし、おそらくコードを後ろにコードする必要はありませんあなたの現在の問題のための解決策です:)

多くの場合一般的なコンテンツでは、SEのためにすべてを混乱させるビューステートのごみコードなしでそれを行うのは、とても良い方法です。

代わりに、私はいくつかのSEOの重要なプロジェクトで成功したことができます。 ビューステートをセッションとして取得して保存し、代わりにビューステートへのセッションキーを作成することができます。そうすれば、サーバーはクライアントではなくビューステートを処理できます。追加のサーバー負荷が発生しますが、常にトレードオフが発生します。

関連する問題