自动加载文本框到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>
<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来引用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控件和母版页问题