2011-10-11 54 views
2

您好我試圖自動將文本框中的值傳遞到詳細信息視圖查詢,但沒有顯示出來。繼承人什麼我有:自動加載文本框到asp.net detailsview

ASP代碼:

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 

</asp:Content> 
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 
    <asp:TextBox ID="test" runat="server"></asp:TextBox> 

&nbsp; 
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
    DataSourceID="SqlDataSource1" Height="50px" Width="125px"> 
    <Fields> 
     <asp:BoundField DataField="blogid" HeaderText="blogid" 
      SortExpression="blogid" /> 
     <asp:BoundField DataField="myfriendid" HeaderText="myfriendid" 
      SortExpression="myfriendid" /> 
     <asp:BoundField DataField="inputdate" HeaderText="inputdate" 
      SortExpression="inputdate" /> 
     <asp:BoundField DataField="content" HeaderText="content" 
      SortExpression="content" /> 
    </Fields> 
</asp:DetailsView> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:test2ConnectionString %>" 
    SelectCommand="SELECT * FROM [BLOG] WHERE ([blogid] = @blogid)"> 
    <SelectParameters> 
     <asp:FormParameter FormField="test" Name="blogid" Type="Double" /> 
    </SelectParameters> 
</asp:SqlDataSource> 
</asp:Content> 

C#代碼:

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

     { 

     string EmpId = Request.QueryString["blog_ID"]; 
     test.Text = blog_ID; 
     DetailsView1.DataBind(); 
    } 
} 

}

如何我可以解決此問題的任何想法?

回答

1

其實在代碼中有一些錯誤。

可以說主要的錯誤是你使用FormParameter來引用測試文本框的值。只有當該文本框或另一個引用的服務器控件直接放置在表單標記中而沒有父服務器控制那些實現像asp:ContentPlaceholder控件的INamingContainer接口時,此類技術才能正常工作。換句話說,如果您使用母版頁,則無法使用FormParameter。

這是因爲實現INamingContainer的每個父控件都參與構建子控件的UniqueID。這些id用於從Request.Form字典中檢索已發佈的值。因此,就放置在Content控件中的測試文本框而言,它的UiqueID看起來像ctl00 $ MainContent $ test。當然你在FormParameter的FormField屬性值上設置了這個id,但是這看起來很醜陋。

要解決此問題,您可以使用ControlParameter而不是FormParameter。像這樣:

<asp:ControlParameter ControlID="test" Name="blogid" 
    PropertyName="Text" Type="Double" /> 

第二個錯誤是,也許在數據綁定最常見的錯誤:你沒有被包裝數據綁定代碼的IsPostBack條件檢查。

但即使您將添加上面提到的檢查,您的代碼仍然不能很好地與FormParameter一起使用,因爲Request.Form字典已經從張貼到HTTP請求正文的表單元素的值形成,並使用POST方法的表單。

爲了解決這個錯誤,你可以使用ControlParameter的傳導如下改寫的Page_Load體:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     test.Text = Request.QueryString["blog_ID"]; 
    } 
} 

提醒大家注意的是,你不需要調用DetailsView1.DataBind方法明確所有頁面的控制數據綁定後處理Page_Load中。

如果它太難以理解我的英文:)請點擊此鏈接到FormParameter和ControlParameter之間實現差異:SqlDataSource control and Master Page problem

+0

感謝,我現在已經定了! – stefan