2011-10-11 76 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