嗨,我正在尝试自动将文本框中的值传递到详细信息视图查询中,但没有显示任何内容。这是我所拥有的:

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


}

关于如何解决此问题的任何想法?

最佳答案

实际上,您的代码中存在一些错误。

可以说主要的错误是您使用FormParameter引用测试文本框值。仅当该文本框或另一个引用的服务器控件直接放置在form标签中而没有父服务器控件实现了asam: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

关于c# - 自动将文本框加载到asp.net detailsview,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7720764/

10-10 07:55