我正在尝试使用一些预定义文本填充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>
答案 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)
“它在开发环境中工作正常,但在服务器上产生” - 所以,权限或丢失的文件可能?