问题 ASP.NET如何解决CS1513:}页面上的预期错误


我在浏览器中查看我的ASP.NET页面时在运行时收到错误。我没有得到任何构建错误但是我在运行时遇到以下编译器错误:

编译错误

描述:在编译服务此请求所需的资源期间发生错误。请查看以下特定错误详细信息并相应地修改源代码。

Compiler Error Message: CS1513: } expected

Source Error:


Line 329:            #line hidden
Line 330:            __output.Write("\r\n\t\t\t</div>\r\n\t\t");
Line 331:        }
Line 332:        
Line 333:        private System.Web.UI.Control __BuildControl__control7() {

Source File: c:\Windows\Microsoft.NET\Framework\v1.1.4322\
    Temporary ASP.NET Files\xxxxxxxx\450ffa78\d46d847d\
    k1gsz9dj.0.cs    Line: 331 

我在源代码中找不到任何遗漏},并且此错误发生在Temporary ASP.NET Files目录中存在的生成的代码文件中。如何将此跟踪到我的页面中实际格式错误的代码行或页面上的用户控件?


8295
2018-02-23 03:52


起源

您是否尝试在指定的文件夹中查找.cs文件? - jcolebrand
它在我的服务器上,我无法访问服务器。 - Tiger
它清楚地说“}”缺少对那些线的检查...... - Madhu
我有不同的用户控件调用到aspx页面。我不能简单地找到这条线。这就是为什么我要求第333行是用户控件的一部分?我该怎么说? - Tiger
这是.NET动态生成的文件,因此请停止建议它说明您需要查找哪一行,因为它在源代码中不存在。 - TuomasK


答案:


如果错误代码如下:

变量名称与保留字相同,则可以重命名变量。

代码段如:

@model MyModel
{
    var appname = @Model.Apps.FirstOrDefault(x => x.ID == Model.SelectedApp);
}

之前删除'@' Model.Apps.FirstOrDefault(x => x.ID == Model.SelectedApp)

代码段或部分用法,例如:

@section{ 
    <!-- hiiii it's not about an error -->
}

从章节中的评论中删除撇号。

如果不是这些特定情况,您可以尝试通过应用源减少来查找生成错误的位置。删除/剪切/注释掉代码片段,直到您可以可靠地关闭和打开错误。如果不是上述情况之一,那么打开错误的代码可能是罪魁祸首。


13
2017-11-13 09:05



今天遇到这个,我的情况是我所拥有的#2 @Model. 在代码段中。看起来像Razor 2,最后一个带有HTML注释和撇号的例子是由剃刀生成器修复的。我无法重现那是一个错误。 - Chris Marisic


查看标记(aspx或ascx)中的块,例如:

<% ... some C# code.... { %>

   markup(controls, html etc)

<% } %>

任何打开的支架 { 需要用另一个括号关闭 }

这些页面或控件在首次请求时由ASP .Net编译一次。 Visual Studio无法编译 aspx or ascx 文件。
如果项目是“Web站点”类型,Visual Studio将编译 aspx/ascx 文件,但如果项目是“Web应用程序”类型,Visual Studio不会“编译”标记(它不会生成相应的类到 aspx/ascx 标记)


1
2018-02-23 05:42



它根据我的经验编译aspx,但我相信你在ascx中是正确的 - jcolebrand
@jcolebrand,请看我的更新 - Adrian Iftode


在我的网站上,问题是由一块看起来像这样的代码引起的:

            @{  
                var currentNode = @linkedList.Find(@CurrentPage);
                if (@currentNode.Next != null)
                {
                    var next = @currentNode.Next;
                    <li>
                        @next.Name
                    </li>
                }
                if (@currentNode.Previous != null)
                {
                    var prev = @currentNode.Previous;
                    <li>
                        @prev.Name
                    </li>
                }
            }

我不确定为什么问题是由嵌套造成的。这可能是编译器中的错误。


0
2017-08-29 08:03



我相信你的错误就是 var next = @currentNode.Next; 和 var prev = @currentNode.Previous; 这两者都在代码段内。我相信剃须刀发生器会想要的 var next = currentNode.Next; 请注意此行中缺少@。 - Chris Marisic


我遇到了类似的问题,只有在经过反复试验后才能找到它。

我犯的错误是在foreach循环中向变量添加一个'@',它以:

@foreach

0
2017-10-25 14:48





正如错误所示,你错过了一个结束大括号'}'

看一下msdn编译器错误文档:

与MSDN上的示例一样:

// the below will cause CS1513 since namespace is missing '}'
namespace y    
{
   class x
   {
      public static void Main()
      {
      }
   }

-1
2018-02-23 04:39



但它不应该让事情在那时编译,以便在temporary_files文件夹中显示文件 - jcolebrand


尝试在visual studio中编译它。我认为它还将显示具有不完整花括号的代码的确切行。

编译错误 CS1513


-1
2018-02-23 05:10