ASP.NET间歇性获取编译器错误消息

时间:2019-09-05 13:47:36

标签: c# asp.net webforms

我有一个aspx页面,仅使用内联C#,没有任何代码隐藏。
从Visual Studio运行可以正常工作,但是将aspx文件添加到本地计算机的wwwroot会显示消息

  

编译器错误消息:CS1513:预期

如果我重新排列代码以使方法位于代码上方,则消息将变为

  

CS1519:类,结构或接口成员声明中的无效令牌“ try”

我希望这与服务器配置有关,尽管我真的不知道从哪里开始。

仅当有方法时才出现此问题,从下面删除method1会导致正确运行。

这是我能够引起错误的最小完整文件

html

<%@ Page Language="C#" %>
<%
    try
    {
        string message = "Text";
        Response.Write(method1(message));
    }
    catch
    {
        Response.Write("Err");
    }

    string method1(string source)
    {
        return source;
    }
%>

2 个答案:

答案 0 :(得分:0)

如果直接将代码嵌入到aspx页面上,则该代码仍必须包含在方法中。例如:

<%@ Page Language="C#" %>
<%
    void Page_Load(Object sender, EventArgs e)
    {
        try
        {
            string message = "Text";
            Response.Write(method1(message));
        }
        catch
        {
            Response.Write("Err");
        }
    }

    string method1(string source)
    {
        return source;
    }
%>

顺便说一句-我们通常不会直接将C#代码放入.aspx文件中。这就是code behind系统的作用。

我们通常不直接写响应。很难控制标记的最终位置。在Web窗体中,最好在页面上声明一个控件,然后在该控件上添加标记(或显示/隐藏控件)。当然,如果我们要谈论做的很好-那么首先不要使用Web窗体。这是一项枯燥的技术。

答案 1 :(得分:0)

我搞砸了Visual Studio项目,在早期版本的.NET / C#上运行会产生以下错误,看来这可能是我遇到的实际问题

  

错误CS8059在C#6中不提供功能'本地功能'。请使用语言版本7.0或更高版本。

我不确定为什么它认为method1是本地函数,并且很难获得详细信息。

编辑:为了解决我的问题,我将该方法放在脚本标签中,而不是在嵌入式代码块中。然后可以从嵌入式块和脚本标签中使用这些方法。

<script runat="server">
    string method1(string source)
    {
        return source;
    }
<script>