2

MasterPageを含む単純なASP.NETページがあります。MasterPage内には、2つのログインフィールドがあります。

<input type="text" runat="server" id="txtUserName"/>
<input type="text" runat="server" id="txtPassword"/>

コントロールがページにレンダリングされると、ASP.NETは次のようにレンダリングします。

<input type="text" runat="server" id="ctl00_txtUserName" name="ctl00$txtUserName"/>
<input type="text" runat="server" id="ctl00_txtPassword" name="ctl00$txtPassword"/>

私が正しく理解していれば、属性はコントロールnameのプロパティに対応しています。UniqueIDただし、デバッグ中にこれらのフィールドPage_Loadを表示しようとすると、値が異なります(それぞれ)。 UniqueIDctl0$txtUserNamectl0$txtPassword

これは、このMasterPageを使用するすべてのページで問題になるとは限らないことに注意してください。それらのほとんどは正しく機能し、レンダリングとの両方ctl0$txtUserNameで使用します。ctl0$txtPasswordPage_Load

ASP.NETがUniqueIDコントロールに対して使用するものとは異なるレンダリングを行う原因となる可能性のあるアイデアはありますPage_Loadか?

4

2 に答える 2

0

MasterPageで生成されたUniqueIDが、Page_Loadでページにレンダリングされたときと異なる原因がまだわかりません。ただし、これらのフィールドのUniqueIDを非表示フィールドに格納することで、この問題を回避することができました。その後、Request.Formコレクションの値に直接アクセスできました。

言い換えれば、私はこれをしました:

MasterPageで-

<input type="text" runat="server" id="txtUserName"/>
<input type="text" runat="server" id="txtPassword"/>

<input type="hidden" id="txtUserNameUID" value="<%=txtUserName.UniqueID%>"/>
<input type="hidden" id="txtPasswordUID" value="<%=txtPassword.UniqueID%>"/>

子ページのPage_Load中-

string username = Request.Form[Request.Form["txtUserNameUID"]];
string password = Request.Form[Request.Form["txtPasswordUID"]];

これがASP.NETのUniqueIDの奇妙さに苦しんでいる他の人に役立つことを願っています!

于 2012-11-28T14:54:38.597 に答える
0

私が気付いた奇妙な癖:runatサーバーであるラッピングコントロールにもIDが必要です。たとえば、コントロールの周りにパネルがある場合、つまり「ctl00」が何であれ、IDを割り当てる必要があります。設定されていない場合は割り当てられ、変更される可能性があります。

于 2015-08-20T11:04:30.313 に答える