簡體   English   中英

根據另一個控件的結果更新用戶控件

[英]Updating User Controls based on result of another control

我是ASP.NET C#的新手,正在嘗試完成以下任務:

具有兩個用戶控件(Control1.ascx和Control2.ascx)的Default.aspx頁。兩個用戶控件都在UpdatePanels中。

需要禁用第二個用戶控件上的TextBox,直到驗證第一個控件上的TextBox。 驗證后,需要在用戶control2上啟用TextBox。

這些用戶控件將在多個頁面上重復使用。 感謝幫助。 如果我需要發布一些代碼,請告訴我。

這是代碼示例:

Default.aspx

<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" 
      CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register src="Control1.ascx" tagname="CTL1"  tagprefix="uc1" %>
<%@ Register src="Control2.ascx" tagname="CTL2"  tagprefix="uc2" %>

<uc1:CTL1 Id="CTL1" runat="Server" UpdateMode="Conditional"/>
<uc2:CTL2 Id="CTL2" runat="Server" UpdateMode="Conditional"/>

Default.aspx.cs

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
}

Control1.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Control1.ascx.cs" Inherits="Control1" %>
 <asp:UpdatePanel ID="UpdatePanel_Fld1" runat="server" UpdateMode="Conditional">
 <ContentTemplate>
  <asp:TextBox ID="TextBox_Fld1" runat="server" Enabled="True" ></asp:TextBox>
  <asp:ImageButton ID="ImageButton_ValidateFld1" runat="server" ImageUrl="~/images/validate.jpg"
      onclick="ImageButton_ValidateFld1_Click" />
  <asp:Label ID="LabelFld1Summary" runat="server" >&nbsp;</asp:Label>
  </ContentTemplate>
 </asp:UpdatePanel>  

Control1.ascx.cs

  public partial class Control1 : System.Web.UI.UserControl
   {
       protected void Page_Load(object sender, EventArgs e)
       {
       }
       public void ImageButton_ValidateFld1_Click(object sender, ImageClickEventArgs e)
       {
           LabelFld1Summary.Text = "Validated";
       }
   }

Control2.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Control2.ascx.cs" Inherits="Control2" %>
 <asp:UpdatePanel ID="UpdatePanel_Fld2" runat="server" UpdateMode="Conditional">
 <ContentTemplate>
  <asp:TextBox ID="TextBox_Fld2" runat="server" Enabled="False"></asp:TextBox>
  <asp:ImageButton ID="ImageButton_ValidateFld2" runat="server" ImageUrl="~/images/validate.jpg"
      onclick="ImageButton_ValidateFld2_Click" />
  <asp:Label ID="LabelFld2Summary" runat="server" >&nbsp;</asp:Label>
  </ContentTemplate>
 </asp:UpdatePanel>  

Control2.ascx.cs

public partial class Control2 : System.Web.UI.UserControl
   {
       protected void Page_Load(object sender, EventArgs e)
       {
       }
       public void ImageButton_ValidateFld2_Click(object sender, ImageClickEventArgs e)
       {
           LabelFld2Summary.Text = "Validated";
       }
   }

我建議使用簡單的JavaScript或讓jQuery進行啟用/禁用操作,將一些js代碼添加到客戶端驗證腳本中

我建議您先使您的方案與同步回發一起使用,然后再將updatepanels添加到組合中。 作為粗略的草圖,在服務器端的某個按鈕或其他按鈕的OnClick處理程序中,您可以根據第一個控件的驗證結果來設置第二個控件的啟用性。 然后,只需確保在針對Control1.ascx的UpdatePanel的異步回發發生時,在Control2.ascx的UpdatePanel上調用Update()

就是說,從用戶的角度來看這將是令人討厭的。 除非第一個控件在其下方調制了大量UI(例如,完全切換到單獨的控件集),否則為什么不讓您的用戶在兩個字段中輸入文本並驗證它們的組合?

我同意西蒙的觀點。 jQuery可能是實現此目的的最簡單方法。 如果出於任何原因需要與背后的代碼進行交互,則可以使用jQuery的ajax方法來調用WebMethod。

我使用了更新面板和ICallbackEventHandler接口( http://madskristensen.net/post/Asynchronous-GridView-in-5-simple-steps.aspx是其使用的一個很好的例子),並取得了一些成功。

盡管我傾向於遠離UpdatePanels,但我意識到它們在后台使用了ICallbackEventHandler接口,我可能會為自己做更多的工作。 按照我的方式進行操作的唯一好處是,在ViewState中沒有一堆垃圾(UpdatePanels喜歡ViewState),因為我將其持久保存在服務器端會話狀態中。

就我而言,使用ICallbackEventHandler方法而不是在后面的代碼中使用jQuery的ajax調用和WebMethods的原因是我想訪問非靜態字段(包括我的Web控件)。 事實證明,我需要在會話中手動保存頁面上顯示的數據,否則最終可能需要為我自己做更多的工作。 這是學習新知識的好機會,但是我從訪問頁面控件中獲得的好處很小/根本不存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM