0

2 人の異なるユーザーが使用するページがあります。ログインしているユーザーが「user1」の場合は 8 つのフィールドすべてを表示し、「user2」の場合は 8 つのフィールドのうち 7 つを表示します。これは、user2 から 1 つのフィールドを非表示にするために使用する html コードです。

 <%If User1 Then%>   
   <tr>
      <td>
         <cc1:Label ID="lblTextBox1" runat="server" />
         <cc1:TextBoxId ID="txtTextBox1" runat="server" LabelId="lblTextBox1" Columns="20" />
     </td>    
  </tr>
<%End If%>

ここで、aspx.vb ページが読み込まれると、これらすべてのコントロールが一緒に読み込まれますが、上記の html コードのために、この 1 つのフィールドは非表示のままです。ページの保存ボタンがクリックされると、保存メソッドは us​​er1 と user2 を区別しようとせず、すべてのコントロールから値を抽出して保存します。

私の問題は、user2 が「保存」すると、「非表示」テキストボックスの値が null になることですが、他のコントロールが入力された時点で、このフィールドも入力されました。どういうわけか、保存している時点で値が '' になりました

なぜこのようなことが起こっているのですか?これに対する最善の解決策/回避策は何ですか?

4

3 に答える 3

1

レンダー ブロックを使用するのではなく、コードで可視性を設定することを考えましたか?

于 2012-08-17T13:46:34.460 に答える
0
<asp:Panel id="pnlForUser2" runat="server">
<tr>
    <td>
        <cc1:Label ID="lblTextBox1" runat="server" />
        <cc1:TextBoxId ID="txtTextBox1" runat="server" LabelId="lblTextBox1" Columns="20" />
    </td>    
</tr>
</asp:Panel>

およびコードビハインドで:

if(Page.User.Identity.Name.Equals("user2"))
    pnlForUser2.Visible = true;

または省略形の演算子を使用します??

于 2012-08-17T15:03:32.230 に答える
0

手っ取り早い回避策は、そのコントロールの値を ViewState または Session に明示的に保存し、手動で再設定することです。この問題は、ページ上のすべての従来の ASP スタイル コード ブロックに起因する可能性があります。

于 2012-08-17T15:11:33.847 に答える