如何在C#程序的ASP.NET页面上填写文本?
我试图用一些预定义的文本填充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中尝试此操作时,
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;
}