如何在C#程序的ASP.NET页面上填写文本?

如何在C#程序的ASP.NET页面上填写文本?,c#,asp.net,C#,Asp.net,我试图用一些预定义的文本填充ASP.NET页面文本框,以便在显示该文本框时,该值是预定义的。我试过了 protected void Page_PreRender () { mytextbox.Text = somestring; } 它在开发环境中运行良好,但在服务器上产生 System.NullReferenceException: Object reference not set to an instance of an object 当我在Page\u Load中尝试此操作时,

我试图用一些预定义的文本填充ASP.NET页面文本框,以便在显示该文本框时,该值是预定义的。我试过了

protected void Page_PreRender ()
{
    mytextbox.Text = somestring;
}

它在开发环境中运行良好,但在服务器上产生

System.NullReferenceException: Object reference not set to an instance of an object
当我在
Page\u Load
中尝试此操作时,同样适用。当我阅读问题的答案时,我所尝试的应该是有效的(至少在其中一个地方)

有人能看出我做错了什么吗

根据建议编辑更多代码。C#看起来像这样:-

    protected void Page_PreRender (Object sender, EventArgs e)
    {
        try
        {
            string [] file_list;
            int i = 0;

            file_list = Directory.GetFiles(MyProg.Common.GetDirectory(),
                                           MyProg.Common.GetFileNameRoot() + "*.*");

            foreach (string filename in file_list)
            {
                string filenameonly = Path.GetFileName (filename);

                if (filenameonly == MyProg.Common.GetFileNameRoot() + "runlog.log")
                {
                    nametextbox.Text = filenameonly;
                }

            }

        }
        catch (Exception ex)
        {
            string mystring = ex.ToString();
            errorMessage.Text = "Page Load Error : " + mystring;
        }

    }
而ASP.NET页面就像这样

<%@ Page Language="C#"
         AutoEventWireup="true"
         CodeBehind="MyDialogue.aspx.cs"
         Inherits="MyDialogue" %>
<%@ Register assembly="ComponentArt.Web.UI"
             namespace="ComponentArt.Web.UI"
             tagprefix="ComponentArt" %>
<%@ Register assembly="ComponentArt.Web.Visualization.Charting"
             namespace="ComponentArt.Web.Visualization.Charting"
             tagprefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
</head>
<body>
<form id="myForm" runat="server">
<div style="visibility:hidden">
<asp:TextBox ID="nametextbox"
             TextMode="MultiLine"
             runat="server"
             Visible="true" />
</div>
</form>
</body>
</html>


这应该可以毫无怨言地工作。
mytextbox
控件是否具有
runat=“server”
属性?您只能使用runat=“server”属性从codebehind内容访问。

您是否发布了您的站点,但对codebehind的文件引用是否保留在aspx页面中?
是否确定bin文件夹中的dll?是否在生产服务器上禁用防病毒的情况下运行


在生产和开发之间比较.Net版本?

可能有几个方面导致此问题。你怎么确定你已经把它缩小到文本框本身了?在添加文本框消息之前,此代码是否完全没有bug?我将在下面发布您的代码,其中包含我认为可能发生的空引用(在注释中):

一些可能的解决方案或更安全的代码:

string [] file_list;
int i = 0;

file_list = Directory.GetFiles(MyProg.Common.GetDirectory(),
                               MyProg.Common.GetFileNameRoot() + "*.*");

if (file_list == null) throw new Exception("File List is null. Something is wrong.");

foreach (string filename in file_list)
{
    string filenameonly = Path.GetFileName (filename);

    string fileroot = MixedZone.Kernel.Common.GetFileNameRoot();
    if(string.IsNullOrEmpty(fileroot) throw new Exception("MixedZone Library failed.");

    if (filenameonly.Equals(fileroot + "runlog.log", StringComparison.OrdinalIgnoreCase)) // Choose your own string comparison here
    {
        nametextbox.Text = filenameonly;
    }

“它在开发环境中运行良好,但在服务器上会产生”-因此,权限或丢失的文件可能?

NullReferenceException在此代码中表示以下两种情况之一:
somestring
为null或
mytextbox
为null。您需要确定是哪个版本。如何部署到生产服务器?您是否在生产服务器中发布了正确版本的aspx文件?aspx文件似乎不包含具有该名称的文本框。自动生成的代码中出现了一些错误。。尝试将这一行添加到类的函数顶部:
protectedtextboxmytextbox希望足够了。@Brian Hooper:没有人能真正帮助你,除非你发布一些有意义的代码(html和代码隐藏),这些代码与你在生产服务器上发布的内容完全匹配(或至少非常接近)。嗯,我不确定Oliver,PreRender是他可以设置该值的最后一刻,并且应该不会比PageLoad更糟糕地完成他需要做的事情。哎哟,我的错误。我可能在想另一件事。谢谢你的建议。是的,文本框确实具有
runat=“server”
属性。谢谢您的建议。由于某种原因,发布功能不起作用;我通过重新构建并复制所有更改的文件将应用程序发送到服务器(Tortoise对此很有帮助)。。但是它并没有解决你的问题。。你在使用母版页吗?如果是的话,你考虑到了吗?您需要首先引用contentplaceholder..呃…我一点也不知道。我怎么说呢?我刚刚看到了你的代码,正如下面建议的,空引用可能来自很多地方。。我以为这只是对文本框的简单引用。德国劳埃德船级社负责解决问题。谢谢你,乔尔。我会试试你建议的东西。我用“在我的机器上工作”作为“无bug”的替代指标,这可能不太正确。谢谢你的帮助,Joel。
目录.GetFiles
确实失败了,尽管它如何持续运行足够长的时间,以至于在发生异常的地方抛出异常对我来说是个谜;我可以使用ftp查看服务器上的文件(不过权限可能有点问题)。
string [] file_list;
int i = 0;

file_list = Directory.GetFiles(MyProg.Common.GetDirectory(),
                               MyProg.Common.GetFileNameRoot() + "*.*");

if (file_list == null) throw new Exception("File List is null. Something is wrong.");

foreach (string filename in file_list)
{
    string filenameonly = Path.GetFileName (filename);

    string fileroot = MixedZone.Kernel.Common.GetFileNameRoot();
    if(string.IsNullOrEmpty(fileroot) throw new Exception("MixedZone Library failed.");

    if (filenameonly.Equals(fileroot + "runlog.log", StringComparison.OrdinalIgnoreCase)) // Choose your own string comparison here
    {
        nametextbox.Text = filenameonly;
    }