So I have two functions and I'm getting an interesting problem. Essentially I'm aiming to make my code more portable in an easily includeable cs file.
Here's said cs file:
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();
}
}
}
Here is the page that is referencing it:
<% @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>
The error I'm getting is the one listed above, namely:
Compiler Error Message: CS0120: An object reference is required for the non-static field, method, or property 'System.Web.UI.Page.Server.get'
On the following line:
Line 5: string path = Server.MapPath("./" + filename);
I ran into a similar thing some time back -- put simply you can't pull Server.MapPath() from the .cs code-behind inside a static method (unless that code behind somehow inherits a web page class, which is probably not allowed anyway).
My simple fix was to have the code behind method capture the path as an argument, then the calling web page executes the method with Server.MapPath during the call.
Code Behind (.CS):
Web-Page (.ASPX) Method Call:
No need to bash or talk down to the OP, it seemed a legitimate confusion. Hope this helps ...
What about using
HttpContext.Current
? I think you can use that to get a reference toServer
in a static function.Described here: HttpContext.Current accessed in static classes
Server
is only available to instances ofSystem.Web.UI.Page
-implementations (as it's an instance property).You have 2 options:
(overhead of creating a
System.Web.UI.HtmlControls.HtmlGenericControl
)or (not tested):
or (not that good option, as it somehow fakes to be static but rather is static for webcontext-calls only):