您好我正在尝试自动将文本框中的值传递到详细信息视图查询中,但没有显示任何内容。继承人我得到了什么:
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#code:
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();
}
}
}
关于我如何解决这个问题的任何想法?
答案 0 :(得分:1)
实际上您的代码中存在一些错误。
可以说主要的错误是您使用FormParameter来引用 test 文本框值。只有当文本框或其他引用的服务器控件直接放置在表单标记而没有父服务器控制那些实现INamingContainer接口(如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" />
第二个错误可能是数据绑定中最常见的错误:您不是通过!IsPostback 条件检查来包装数据绑定代码。
但即使您将添加上面提到的检查,您的代码仍然无法与FormParameter一起使用,因为Request.Form字典已经根据发布到HTTP请求正文的表单元素的值形成,并且表单使用POST方法。< / p>
要解决此错误,您可以使用ControlParameter重写Page_Load body,如下所示:
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