我正在嘗試查找連接到母版頁的網頁上的控件。控件本身位於內容頁面上,這應該是一件簡單的事情,但是無論我使用什麼方法,每次都會返回null。無法在頁面母版頁上找到控件
在這兩行其崩潰和說該參數不能爲空
文本框txtSubjectNotes =(文本框)item.FindControl( 「txtSubjectNotes」);
TextBox txtMultiNotes =(TextBox)item.FindControl(「txtMultiNotes」);
而我在它下面標記爲這兩個控件,而我正在試圖訪問
<telerik:RadTextBox ID="txtSubjectNotes" Width="200px" runat="server"></telerik:RadTextBox>
<telerik:RadTextBox ID="txtMultiNotes" TextMode="MultiLine" Rows="10" Columns="10" Width="200px" runat="server"></telerik:RadTextBox>
任何幫助在能夠asolve這將是偉大的,不,這不是具體到Telerik控制這是能夠在頁面上找到控件的標準.net代碼。
<telerik:RadAjaxPanel ID="rpNotes" runat="server" LoadingPanelID="RadAjaxLoadingPanel1" >
<telerik:RadGrid ID="rgNotes" runat="server" GroupPanelPosition="Top" OnItemCommand="rgNotes_ItemCommand" >
<GroupingSettings CollapseAllTooltip="Collapse all groups"></GroupingSettings>
<MasterTableView NoDetailRecordsText="No notes for this Appointment" AutoGenerateColumns="False" DataKeyNames="notes_id" CommandItemDisplay="Top" CommandItemSettings-AddNewRecordText="Add Notes" AllowAutomaticInserts="true" EditMode="PopUp">
<Columns>
<telerik:GridEditCommandColumn UniqueName="EditCommandColumn">
</telerik:GridEditCommandColumn>
<telerik:GridBoundColumn DataField="notes_id" FilterControlAltText="Filter notes_id column" HeaderText="notes_id" ReadOnly="True" SortExpression="notes_id" Visible="true" UniqueName="notes_id">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Subject" FilterControlAltText="Filter Subject column" HeaderText="Subject" ReadOnly="True" SortExpression="Subject" UniqueName="Subject">
</telerik:GridBoundColumn>
</Columns>
<EditFormSettings EditFormType="Template" InsertCaption="Add new Note" CaptionFormatString="Please enter or update note">
<FormTemplate>
<telerik:RadTextBox ID="txtNotesId" Visible="false" Width="200px" runat="server"></telerik:RadTextBox>
Subject
<p>
<telerik:RadTextBox ID="txtSubjectNotes" Width="200px" runat="server"></telerik:RadTextBox>
</p>
<p>
Notes<br />
<telerik:RadTextBox ID="txtMultiNotes" TextMode="MultiLine" Rows="10" Columns="10" Width="200px" runat="server"></telerik:RadTextBox>
</p>
<telerik:RadButton ID="rdSaveNotes" OnClick="rdSaveNotes_Click" Skin="Bootstrap" BackColor="#512479" ForeColor="White" runat="server" Text="Save Notes"></telerik:RadButton>
<telerik:RadButton ID="rdCancel" OnClick="rdCancel_Click1" CommandName="Cancel" Skin="Bootstrap" BackColor="#512479" ForeColor="White" runat="server" Text="Cancel"></telerik:RadButton>
</FormTemplate>
</EditFormSettings>
</MasterTableView>
<ClientSettings>
<ClientEvents OnPopUpShowing="PopUpShowing" />
<Selecting AllowRowSelect="true" />
</ClientSettings>
</telerik:RadGrid>
</telerik:RadAjaxPanel>
protected void rdSaveNotes_Click(object sender, EventArgs e)
{
try
{
int id = Convert.ToInt32(Request.QueryString["id"]);
tblApertureNetNote _note = new tblApertureNetNote();
_note = _dal.GetNotesById(new Guid(notes_id),_myuser.UserId);
_note.appointment_id = id;
_note.authUserId = _myuser.UserId;
_note.isActive = true;
_note.isDeleted = false;
var editFormItems = rgNotes.MasterTableView.GetItems(GridItemType.EditFormItem);
foreach (GridEditFormItem item in editFormItems)
{
if (!item.IsInEditMode)
{
continue;
}
TextBox txtSubjectNotes = (TextBox)item.FindControl("txtSubjectNotes");
TextBox txtMultiNotes = (TextBox)item.FindControl("txtMultiNotes");
//add custom logic here
_note.note = txtMultiNotes.Text;
_note.subject = txtSubjectNotes.Text;
}
if (_note.EntityState == System.Data.EntityState.Detached)
_dal.Addnotes(_note);
rgNotes.DataBind();
}
catch (Exception ex)
{
logger.Error("Error in rdSaveNotes_Click function calandar edit.aspx" + ex.ToString());
}
}
感謝下面的評論由mig。這個方法我試過和它發現它,但它蒙上一個人如何實習生強制轉換成文本框中鍵入它作爲控制這是contorl被即時試圖找到這個應該是什麼難
public static Control FindControlRecursive(this Control control, string id)
{
if (control == null) return null;
//try to find the control at the current level
Control ctrl = control.FindControl(id);
if (ctrl == null)
{
//search the children
foreach (Control child in control.Controls)
{
ctrl = FindControlRecursive(child, id);
if (ctrl != null) break;
}
}
return ctrl;
}
即怎麼辦我投這行到一個文本框?
Control ctrl = this.FindControlRecursive("my_control_id");
編輯2
行,所以我都試過,但現在我得到
{ 「未將對象引用設置到對象的實例。」}
RadTextBox ctrl = (RadTextBox)this.FindControlRecursive("txtSubjectNotes");
RadTextBox myControl;
if (ctrl is RadTextBox)
{
myControl = (RadTextBox)this.FindControlRecursive("txtSubjectNotes");
// _note.note = txtMultiNotes.Text;
_note.subject = myControl.Text;
}
感謝您的投票上有傢伙 – rogue39nin
我認爲你需要使用遞歸查找。 http://stackoverflow.com/questions/4955769/better-way-to-find-control-in-asp-net – mlg
@mig謝謝你的工作,但看看我的新意見上面,請看看你是否可以回答這個問題給你的榮譽 – rogue39nin