Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Razor renderpartial异常-应为';}&引用;_C#_Asp.net_Asp.net Mvc 3_Razor - Fatal编程技术网

C# Razor renderpartial异常-应为';}&引用;

C# Razor renderpartial异常-应为';}&引用;,c#,asp.net,asp.net-mvc-3,razor,C#,Asp.net,Asp.net Mvc 3,Razor,在我的代码中: @foreach (var post in Model.Posts) { Html.RenderPartial("ShowPostPartial", post); } 我有一个关于渲染部分的例外 错误CS1513:}应为 我做错了什么?我的剃须刀出了这个问题。我不确定这是解析器中的错误还是什么,但我解决它的方法是分解: @using(Html.BeginForm()) { <h1>Example</h1> @foreach (var post

在我的代码中:

@foreach (var post in Model.Posts)
{
    Html.RenderPartial("ShowPostPartial", post);
}
我有一个关于渲染部分的例外

错误CS1513:}应为


我做错了什么?

我的剃须刀出了这个问题。我不确定这是解析器中的错误还是什么,但我解决它的方法是分解:

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

} 
@使用(Html.BeginForm()){
例子
@foreach(Model.Posts中的var post)
{
Html.RenderPartial(“ShowPostPartial”,post);
}
} 
进入:

@{Html.BeginForm();}
例子
@foreach(Model.Posts中的var post)
{
Html.RenderPartial(“ShowPostPartial”,post);
}
@{Html.EndForm();}
我的坏习惯。 我在局部视图中出错了。
我在HtmlatAttributes中写了“class”而不是“@class”。

为了完整起见,这里有另一种导致这种情况的方法:

@if(condition)
{
    <input type="hidden" value="@value">
}
@if(条件)
{
}
问题是,unclosed元素使得内容是否是html块不够明显(但我们并不总是使用xhtml,对吧?)

在此场景中,您可以使用:

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

@if(条件)
{
}

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

@using (Html.BeginForm())
{ 
   <div class="divClass">
     @Html.DisplayFor(c => c.SomeProperty)
}
</div>
@使用(Html.BeginForm())
{ 
@DisplayFor(c=>c.SomeProperty)
}
这是正确的:

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

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

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

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

不要:\n
@{if(check){body}}
推荐:
@if(check){body}

-->当您已经在服务器范围内时,请避免使用@

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

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


参考:

此代码是否在另一个
{…}
对中?就在那时,我谈到了这个问题。我认为去掉@before
foreach
可以解决这个问题。你有什么理由不使用它吗@正在使用(Html.BeginForm()){//content/}。。。那是你的问题,我相信没有,我只是忘了D编辑以修复。顺便说一句,您的问题是您的foreach前面有一个@。另外,我更喜欢@Html.Partial而不是Html.RenderPartial。。。但那只是我:P@Linkgoron:关闭大括号后,您将需要另一个
@
。我将添加一个html元素以避免进一步的混淆。我正在讨论您的第一个示例。有使用说明的那个。在foreach之前,您不需要另一个@,因为您已经处于代码块中。在这种情况下,我们经常使用
包装器。这为我解决了这个问题。
@using (Html.BeginForm())
{ 
   <div class="divClass">
     @Html.DisplayFor(c => c.SomeProperty)
}
</div>
@using (Html.BeginForm())
{ 
   <div class="divClass">
     @Html.DisplayFor(c => c.SomeProperty)
   </div>
}