【问题标题】:Razor renderpartial exception - expected '}"Razor 渲染部分异常 - 预期为“}”
【发布时间】:2011-03-20 15:49:48
【问题描述】:

在我的代码中:

@foreach (var post in Model.Posts)
{
    Html.RenderPartial("ShowPostPartial", post);
}

我在 RenderPartial 行有一个例外。

错误 CS1513: } 预期。

我做错了什么?

【问题讨论】:

  • 这段代码是否在另一个{...} 对中?那是我遇到这个问题的时候。而且我认为在foreach 修复它之前省略@。

标签: c# asp.net asp.net-mvc-3 razor


【解决方案1】:

为了完整起见,这是导致此问题的另一种方式:

@if(condition)
{
    <input type="hidden" value="@value">
}

问题在于未闭合的元素使得内容是一个 html 块的内容不够明显(但我们并不总是 使用 xhtml,对吧?)。

在这种情况下,您可以使用:

@if(condition)
{
    @:<input type="hidden" value="@value">
}

@if(condition)
{
    <text><input type="hidden" value="@value"></text>
}

【讨论】:

  • 在这种情况下,我们经常使用 &lt;text&gt; 包装器。
【解决方案2】:

这与 Mark Gravell 给出的答案基本相同,但我认为如果你有更大的视野,这是一个容易犯的错误: 检查 html 标签以查看它们的开始和结束位置,并注意两者之间的 razor 语法,这是错误的:

@using (Html.BeginForm())
{ 
   <div class="divClass">
     @Html.DisplayFor(c => c.SomeProperty)
}
</div>

这是正确的:

@using (Html.BeginForm())
{ 
   <div class="divClass">
     @Html.DisplayFor(c => c.SomeProperty)
   </div>
}

同样,与之前关于未关闭输入元素的帖子几乎相同,但请注意,我在更改视图时多次放置了 div 的错误。

【讨论】:

  • 这为我解决了这个问题。
【解决方案3】:

我的错。 我在局部视图中有错误。 我在 htmlAttributes 中写了 'class' 而不是 '@class'。

【讨论】:

    【解决方案4】:

    我在 Razor 上遇到了这个问题。我不确定这是解析器中的错误还是什么,但我解决它的方法是分解:

    @using(Html.BeginForm()) { 
    <h1>Example</h1>
    @foreach (var post in Model.Posts)
    {
        Html.RenderPartial("ShowPostPartial", post);
    }
    
    } 
    

    进入:

    @{ Html.BeginForm(); }
    <h1>Example</h1>
    @foreach (var post in Model.Posts)
    {
        Html.RenderPartial("ShowPostPartial", post);
    }
    
    @{ Html.EndForm(); }
    

    【讨论】:

    • 你有什么理由不使用Using吗? @using (Html.BeginForm()) { // content // }... 我相信这是你的问题
    • 不,我只是忘记了。 :D 编辑修复。
    • 顺便说一句,您的问题是您的 foreach 之前有一个 @ 。另外,我更喜欢@Html.Partial 而不是 Html.RenderPartial ...但这就是我:P
    • @Linkgoron:合上大括号后,您需要另一个@。我将添加一个 html 元素以避免进一步混淆。
    • 我说的是你的第一个例子。使用的那个。在 foreach 之前不需要另一个 @,因为您已经在代码块中。
    【解决方案5】:

    MVC4 的 Razor 解析器与 MVC3 不同。 Razor v3 具有高级解析器功能,另一方面,与 MVC3 相比,其解析更为严格。

    --> 避免在视图中使用服务器块,除非有变量声明部分。

    不要:\n @{if(check){body}} 受到推崇的 : @if(check){body}

    --> 当你已经在服务器范围内时避免使用@。

    不要:@if(@variable) 推荐:@if(variable)

    不要:@{int a = @Model.Property } 推荐:@{int a = Model.Property }

    参考:https://code-examples.net/en/q/c3767f

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      • 2019-06-20
      • 2014-01-13
      • 1970-01-01
      • 2014-08-17
      • 2015-05-25
      • 2015-01-08
      相关资源
      最近更新 更多