自动加载文本框到asp.net detailsview

本文关键字:asp net detailsview 加载 文本 | 更新日期: 2023-09-27 18:10:50

嗨,我试图自动传递一个值从一个文本框到一个详细信息视图查询,但没有显示。这是我得到的:

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();
    }
}

}

有什么想法我可以解决这个问题吗?

自动加载文本框到asp.net detailsview

实际上你的代码中有一些错误。

可以说,主要的错误是您使用FormParameter来引用test文本框值。只有当文本框或其他引用服务器控件直接放置在表单标签中,而没有父服务器控件实现INamingContainer接口(如asp:ContentPlaceholder控件)时,这种技术才有效。换句话说,如果使用母版页,就不能使用FormParameter。

这是因为每个实现了INamingContainer的父控件都参与了子控件的uniqueid的构建。这些id用于从请求中检索提交的值。形成字典。因此,就放置在内容控件中的测试文本框而言,它的UiqueID看起来像ctl00$MainContent$test。当然,你可以在FormParameter的FormField属性值上设置这个id,但这看起来非常难看。

要解决这个问题,你可以使用ControlParameter代替FormParameter。这样的:

<asp:ControlParameter ControlID="test" Name="blogid" 
    PropertyName="Text" Type="Double" />
第二个错误可能是数据绑定中最常见的错误:您没有使用包装数据绑定代码!IsPostback条件检查。

但是,即使您将添加上面提到的检查,您的代码仍然不能很好地使用FormParameter作为请求。表单字典已经由发送到HTTP请求主体的表单元素的值组成,其中一个表单使用POST方法。

要解决此错误,可以使用ControlParameter:

将Page_Load body重写为如下所示:
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        test.Text = Request.QueryString["blog_ID"];
    }
}

请注意,您不需要调用DetailsView1。在Page_Load之后处理的所有页面控件的databindings

如果很难理解我的英语:)请点击此链接了解FormParameter和ControlParameter之间的区别:SqlDataSource控件和母版页问题