【发布时间】:2016-09-03 02:21:55
【问题描述】:
我是从控制 asp:SqlDataSource 的角度来处理这个问题的取而代之的是 formview 内的控制级别,因为它对我来说似乎更有意义。
所以对于背景 下面的代码旨在注入下面屏幕剪辑的前两行中列出的字符串值(以及包含的代码块底部的两个相应的 Response.Write's)。
我想要做的是使用 FindControl 来设置这些项目的 Text 值(但在完成此操作后我还有一些 asp:checkbox 需要处理,这需要同样的处理。)现在我只关注这两个控件。第一个是asp:label
<asp:Label runat="server" ID="SubmitByLbl" Text='<%# Eval("SubmitBy") %>' ></asp:Label>
接下来是一个asp:TextBox:
<asp:TextBox Text='<%# Bind("SubmitDT") %>' runat="server" ID="SubmitDTTextBox" />
这两个都位于 asp:FormView 内部,其 ID="AddItemFv" 具有 DataSourceID="AddInvAsset"(与本次讨论无关,但仅作为补充信息提供)。
这是我的问题所在的代码:
namespace CInTrac
{
public partial class AddAsset : System.Web.UI.Page
{
protected void Page_Preload(object sender,EventArgs e)
{
AddInvAsset.SelectParameters.Add("SubmitBy", Session["RegUser"].ToString());
AddInvAsset.SelectParameters.Add("SubmitDT", DateTime.Now.ToString("MM/dd/yyyy"));
}
protected void Page_Load(object sender, EventArgs e)
{
Label uname = (Label)AddItemFv.Row.FindControl("SubmitBy");
if (uname != null)
uname.Text = Session["RegUser"].ToString();
TextBox udate = (TextBox)AddItemFv.Row.FindControl("SubmitDT");
if (udate != null)
udate.Text = DateTime.Now.ToString();
Response.Write("<b>Submitted by should be:</b> = " + Session["RegUser"].ToString() + "<br>");
Response.Write("<b>Submit Date should be:</b> = " + DateTime.Now.ToString("MM/dd/yyyy") + "<br>");
}
}
}
我遇到的问题正是您在上面的示例中看到的;绝对没有!我是 C# 的新手,所以我可能在这里的代码有问题,在调试时我的跟踪表明,当我们检查 null 时,它无法为每个 VAR 的 .Text 赋值,因此我们的值永远不会出现。
更新: 正如 IM 指出的那样,我错过了代码中控件的正确名称。以下是我对上面代码所做的更正,效果很好。再次感谢 Inquisitive_mind 指出我的错误。 :
protected void Page_Load(object sender, EventArgs e)
{
Label uname = (Label)AddItemFv.Row.FindControl("SubmitByLbl");
if (uname != null)
uname.Text = Session["RegUser"].ToString();
TextBox udate = (TextBox)AddItemFv.Row.FindControl("SubmitDTTextBox");
if (udate != null)
udate.Text = DateTime.Now.ToString("MM/dd/yyyy");
}
【问题讨论】: