質問

ASP.NET ListViewのEditItemTemplateのコントロールのセットにクライアント側のプロパティを設定しようとしています。

たとえば、edititemtemplateに次のようなものが含まれている場合:

<tr id='phoneRow'>
  <td>
    <asp:Label ID="lblPhoneLabel" runat="server" Text="Phone Number: " />
  </td>
  <td>
    <asp:Label ID="lblPhoneNumber" runat="server" 
               Text='<%# Bind("PhoneNumber") %>' />
  </td>
</tr>

実際に電話番号がある場合にのみ行を表示したいので、JavaScriptは次のようなものです。

function showOrHidePhoneRow(rowId, labelId)
{
    var row = document.getElementById(rowId);
    var label = document.getElementById(labelId);

    if (label.value == "")
        row.style.visibility = "collapsed";
    else
        row.style.visibility = "visible";
}

Code-Behindでこの関数に呼び出しを追加しようとしていますが、方法はわかりません。オンロードは手遅れのようです。

protected void lvwExample_ItemCreated(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        ListViewDataItem item = e.Item as ListViewDataItem;
        if (item.DisplayIndex == lvwExample.EditIndex)
        {
            Label label = item.FindControl("lblPhoneNumber") as Label;
            if (label != null)
            {
                // Get here, but row always visible
                label.Attributes.Add("onload",
                    "showOrHidePhoneRow('phoneRow', '" + label.ClientId + "');");
            }
        }
    }
}

どんなポインターも大歓迎です。

ありがとう、wts

役に立ちましたか?

解決

ここでの問題は、それです ASP:ラベル タグはaとしてレンダリングされます スパン HTMLのタグ...およびオンロードイベントはタグに存在しません...したがって、適切なタイミングで属性を設定していますが、解雇されないイベントを処理しようとしています。 Soutionは、シナリオでJavaScriptの実行を完了し、サーバーイベントを使用してそれを処理することだと思います。何かのようなもの

Protected Sub ListView1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs) Handles ListView1.ItemDataBound
    Dim myLabel As Label = e.Item.FindControl("lblPhoneNumber")
    If Not myLabel Is Nothing Then
        e.Item.Visible = IIf(myLabel.Text = "", True, False)
    End If
End Sub

これにより、すべてのアイテムを処理し、ラベルの値に基づいて行を隠すかどうかを決定します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top