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

时间:2011-08-31 12:29:06

标签: 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_Load中尝试此操作时同样适用。当我阅读this问题的答案时,我正在尝试的应该是有效的(至少在其中一个地方)。

谁能看到我做错了什么?

编辑更多代码,如建议的那样。 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>

5 个答案:

答案 0 :(得分:2)

这应该没有抱怨。 mytextbox控件是否具有runat="server"属性?您只能使用runat =“server”属性从代码隐藏的东西中访问。

答案 1 :(得分:2)

您是否发布了自己的网站,但是对于代码隐藏的文件反应是否保留在aspx页面中? 你确定bin文件夹中的dll吗?

答案 2 :(得分:1)

在生产服务器上禁用防病毒运行?

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

答案 3 :(得分:1)

可能有几个区域导致此问题。您如何确定已将其缩小到文本框本身?在添加文本框消息之前,此代码是否完全没有错误?我将在下面发布您的代码,我认为可能会发生潜在的空引用(在评论中):

string [] file_list;
int i = 0;

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

// it is possible that file_list is null
// potentially due to an invalid path (missing / perhaps?)
foreach (string filename in file_list)
{
    string filenameonly = Path.GetFileName (filename);

    // It's possible that the MixedZone.Kernel.Common library
    // is experiencing the null reference exception because it
    // may not understand what file to get the name root of or 
    // maybe it is not capable of getting the root for some
    // other reason (permissions perhaps?)
    if (filenameonly == MixedZone.Kernel.Common.GetFileNameRoot() + "runlog.log")
    {
        nametextbox.Text = filenameonly;
    }

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

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;
    }

答案 4 :(得分:1)

“它在开发环境中工作正常,但在服务器上产生” - 所以,权限或丢失的文件可能?