gpt4 book ai didi

c# - 自动将文本框加载到 asp.net detailsview

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:31 25 4
gpt4 key购买 nike

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

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 来引用 test 文本框值。只有当文本框或另一个引用的服务器控件直接放置在表单标记中而没有父服务器控件时,这种技术才能很好地实现 INamingContainer 接口(interface),如 asp:ContentPlaceholder 控件。换句话说,如果您使用母版页,则不能使用 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" />

第二个错误可能是数据绑定(bind)中最常见的错误:您没有通过 !IsPostback 条件检查来包装数据绑定(bind)代码。

但即使您将添加上面提到的检查,您的代码仍然不能很好地与 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 方法,因为所有页面的控件数据绑定(bind)都在 Page_Load 之后处理。

如果我的英语太难理解 :) 请点击此链接了解 FormParameter 和 ControlParameter 之间的区别:SqlDataSource control and Master Page problem

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com