嗨,我正在尝试自动将文本框中的值传递到详细信息视图查询中,但没有显示任何内容。这是我所拥有的:
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引用测试文本框值。仅当该文本框或另一个引用的服务器控件直接放置在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/