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}
参考:此代码是否在另一个
{…}
对中?就在那时,我谈到了这个问题。我认为去掉@beforeforeach
可以解决这个问题。你有什么理由不使用它吗@正在使用(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>
}