2

最近、マスター ページを使用するように Web サイトの構造を変更しました。最初の問題は、すべての ID が変更され、id が ct100_something_id になったため、document.getElementById('id') が ID を見つけることができたため、すべての JavaScript が機能しなかったことです。ClientIDMode="Static" を使用して修正しましたが、Request.Form を使用していて、すべての名前属性がまだ ct100_ に変更されているため、ポストバックに別の問題があることがわかりました....

私が見る限り、ClientNameMode はありません。どうすれば asp.net が「派手な」名前属性を作成するのを止めることができますか。サーバー コントロールで name 属性を明示的に設定できません。

明確にするために:

これを行う方法はありますか:

<asp:HiddenField runat="server" ID="hdnUsername" Value="" />

...次のようにレンダリング:

<input type="hidden" name="hdnUsername" id="hdnUsername" value="" />

...そして次のようではありません:

<input type="hidden" name="ctl00$bodyContent$hdnUsername" id="hdnUsername" value="" />

?

4

2 に答える 2

0

Request.Formコントロールにアクセスしている場合は、コントロールを直接使用してアクセスする必要はありません。例えばthis.TextBoxName.Text

これで問題が解決しない場合、私が過去に行ったことは、TextBox使用時に name 属性を id 属性と一致するように変更する独自のコントロールを作成することですClientIdMode=Static

私のブログをチェックしたらhttp://timjames.me/modify-asp.net-textbox-name-attribute

ここに私のコードがありますが、vb.net であるため、c# に変更する必要があります。

これを適応させてHiddenFields、ニーズに合わせることができます。

Public Class CleanNamesTextBox
    Inherits TextBox

    Private Class CleanNamesHtmlTextWriter
        Inherits HtmlTextWriter

        Sub New(writer As TextWriter)
            MyBase.New(writer)
        End Sub

        Public Overrides Sub AddAttribute(key As System.Web.UI.HtmlTextWriterAttribute, value As String)
            value = value.Split("$")(value.Split("$").Length - 1)
            MyBase.AddAttribute(key, value)
        End Sub

    End Class

    Protected Overrides Sub Render(writer As System.Web.UI.HtmlTextWriter)
        Dim noNamesWriter As CleanNamesHtmlTextWriter = New CleanNamesHtmlTextWriter(writer)
        MyBase.Render(noNamesWriter)
    End Sub

    Sub New(id As String, text As String, cssClass As String, clientIDMode As ClientIDMode)
        MyBase.New()
        Me.ID = id
        Me.CssClass = cssClass
        Me.ClientIDMode = clientIDMode
        Me.Text = text
    End Sub

End Class
于 2012-05-17T09:17:38.377 に答える
-1

申し訳ありませんが、コントロールの ID にプレフィックスとして一意のキーを追加することにより、クライアント側でサーバー コントロールを一意に識別するのは ASP.net のプロパティです。

于 2012-05-17T09:17:16.933 に答える