C# 非静态字段、方法或属性需要对象引用';System.Web.UI.Page.Server.get';
所以我有两个函数,我得到了一个有趣的问题。本质上,我的目标是使我的代码在一个易于包含的cs文件中更具可移植性 下面是所说的cs文件:C# 非静态字段、方法或属性需要对象引用';System.Web.UI.Page.Server.get';,c#,asp.net,inheritance,object,server.mappath,C#,Asp.net,Inheritance,Object,Server.mappath,所以我有两个函数,我得到了一个有趣的问题。本质上,我的目标是使我的代码在一个易于包含的cs文件中更具可移植性 下面是所说的cs文件: namespace basicFunctions { public partial class phpPort : System.Web.UI.Page { public static string includer(string filename) { string path = Server.MapPath("./" + filenam
namespace basicFunctions {
public partial class phpPort : System.Web.UI.Page {
public static string includer(string filename) {
string path = Server.MapPath("./" + filename);
string content = System.IO.File.ReadAllText(path);
return content;
}
public void returnError() {
Response.Write("<h2>An error has occurred!</h2>");
Response.Write("<p>You have followed an incorrect link. Please double check and try again.</p>");
Response.Write(includer("footer.html"));
Response.End();
}
}
}
命名空间基本函数{
公共部分类phpPort:System.Web.UI.Page{
公共静态字符串includer(字符串文件名){
字符串路径=Server.MapPath(“./”+文件名);
字符串内容=System.IO.File.ReadAllText(路径);
返回内容;
}
public void returnError(){
Write(“发生错误!”);
回答。写(“您使用的链接不正确。请仔细检查并重试。”;
Write(includer(“footer.html”);
Response.End();
}
}
}
以下是引用它的页面:
<% @Page Language="C#" Debug="true" Inherits="basicFunctions.phpPort" CodeFile="basicfunctions.cs" %>
<% @Import Namespace="System.Web.Configuration" %>
<script language="C#" runat="server">
void Page_Load(object sender,EventArgs e) {
Response.Write(includer("header.html"));
//irrelevant code
if ('stuff happens') {
returnError();
}
Response.Write(includer("footer.html"));
}
</script>
无效页面加载(对象发送方,事件参数e){
Write(includer(“header.html”);
//无关代码
如果(‘事情发生了’){
returnError();
}
Write(includer(“footer.html”);
}
我得到的错误是上面列出的错误,即:
编译器错误消息:CS0120:非静态字段、方法或属性“System.Web.UI.Page.Server.get”需要对象引用
在以下行:
第5行:字符串路径=Server.MapPath(“./”+文件名)
仅对System.Web.UI.Page
-实现的实例可用(因为它是实例属性)
您有两种选择:
System.Web.UI.HtmlControls.HtmlGenericControl
的开销)
或(未测试):
或者(这不是一个好的选择,因为它在某种程度上假装是静态的,但只在webcontext调用中是静态的):
如何使用
HttpContext.Current
?我认为您可以使用它在静态函数中获取对服务器的引用
此处描述:不久前,我遇到了类似的事情——简单地说,您无法从静态方法中的.cs代码中提取Server.MapPath()(除非该代码以某种方式继承了web页面类,这可能是无论如何都不允许的) 我的简单修复方法是让代码隐藏方法捕获路径作为参数,然后调用web页面在调用期间使用Server.MapPath执行该方法 代码隐藏(.CS): 网页(.ASPX)方法调用:
...
doStuff(Server.MapPath("./log/"),"saveBasic");
...
没有必要抨击或贬低OP,这似乎是一种合理的困惑。希望这有帮助…OP是子类化的
System.Web.UI.Page
。这不是OP的问题。这是OP的问题-他无法区分静态和实例属性。。。我已经清楚地说明了…的例子当然,你的答案现在更清楚了。你最初的回答暗示OP没有使用那个课程。我们不要假设,好吗?知道别人在你做那件事时说了些什么吗@用户798080 sry。。。如果还有一个编辑按钮。。。我不想显得傲慢,但是。。。我自己也遇到过这个问题,所以我显然毫无疑问会在这里发现真正的问题(顺便说一句,我希望我的评论没有粗鲁的言辞——但我担心它有……这根本不是有意的!)。。。很高兴我的回答帮助了你!我强烈建议您不要重复php的错误。相反,我们应该看看母版页是如何工作的,或者直接转到MVC。并不是所有人都认为PHP的编码风格是错误的。对于我们这些拥有更传统的编码背景的人来说,这种背景以牺牲生产速度(虽然不是运行时)或高度关注对象为代价,为我们提供了更低级的控制和编码灵活性,这确实让我们感觉有点自在。此外,文档的better=P。此外,我发现你越深入ASP.NET兔子洞,你的HTML和JavaScript就越糟糕(因为它开始大量生成)。XHTML、JSLint等对我来说很重要,所以我更愿意让尽可能多的代码依赖于自己。我认为微软官方认可的方式没有错。然而,说它本质上更好,因为它是人们告诉你要做的事情,这有点不真实,因为它通常会创建具有更大内存占用、更多常见错误安全漏洞和更多行代码的代码。当然,另一方面,在许多方面,对于有许多单独程序员一起工作的大型生产工作场所来说,它也更好。不同的编码风格,仅此而已。不过,恐怕我会一直在PHP阵营。(此外,现代C#将永远有IIS的阻碍,让我认真使用。Mod#u Mono可以为您提供良好的基本支持,但如果您想高效地完成任何复杂的工作,您需要为非Windows/非IIS服务器使用另一种语言)@user798080我建议进一步探索.NET系列。。。它主要不是关于ASP.NET的。WCF、WPF(以及深受喜爱的Silverlight)当然还有控制台和服务应用程序(以及可以与.NET一起使用的任何其他组件)是另一个重要部分。使用.NET(以及以独立于组件的方式编码)的主要好处是为您带来了代码共享和重用的巨大好处,而这正是所有大型玩家所追求的主要问题!随着您对.NET的深入了解,您将以最简单的方式了解chrislive的真正含义!您可以将各种机密信息放入CS中,传递mappath命令不会泄露任何机密信息。
public static string FooMethod(string path)
{
var mappedPath = HostingEnvironment.MapPath(path);
return mappedPath;
}
public static string FooMethod(string path)
{
var mappedPath = HttpContext.Current.Server.MapPath(path);
return mappedPath;
}
public static string includer(string filename)
{
string content = System.IO.File.ReadAllText(filename);
return content;
}
includer(Server.MapPath("./" + filename));
public static void doStuff(string path, string desc)
{
string oldConfigPath=path+"webconfig-"+desc+"-"+".xml";
... now go do something ...
}
...
doStuff(Server.MapPath("./log/"),"saveBasic");
...