我一直在浏览asp.net Contoso University tutorial,并且C#代码和HTML标记之间有两个特定的转换(使用" @:"),这些转换不被理解为我:
1)
@:<td>
我已经读过,当ASP.NET看到开始的HTML标记时,它会自动将代码视为HTML标记。如果是这样,为什么&#34; @:&#34;用在这里?
2)
@course.CourseID @: @course.Title
为什么&#34; @:&#34;在代码行的中间而不是在开始?
完整视图代码如下。 提前感谢任何试图提供帮助的人。
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<table>
<tr>
@{
int cnt = 0;
List<ContosoUniversity.ViewModels.AssignedCourseData> courses = ViewBag.Courses;
foreach (var course in courses)
{
if (cnt++ % 3 == 0)
{
@:</tr><tr>
}
@:<td>
<input type="checkbox"
name="selectedCourses"
value="@course.CourseID"
@(Html.Raw(course.Assigned ? "checked=\"checked\"" : "")) />
@course.CourseID @: @course.Title
@:</td>
}
@:</tr>
}
</table>
</div>
答案 0 :(得分:1)
简而言之,它用于告诉将此文本渲染为纯HTML,不要将其视为c#代码。
在您的特定情况下,它用于在此处的ViewId和课程标题之间添加空格:
@course.CourseID @: @course.Title
@course.CourseID
是c#代码,当 @:来时它现在是纯文本,然后当@course.Title
出现时它被认为是c#代码,所以 @: 是指定它是普通的html而不是c#代码。
答案 1 :(得分:0)
1)您对HTML标记行为是正确的。他们可以使用<td>
代替@:<td>
。
2)你也是@course.CourseID @: @course.Title
。我也不清楚为什么他们选择使用这种模式。如果他们使用@course.CourseID @course.Title
,它的工作原理会相同。
你可以尝试自己,看到你得到相同的结果和输出。
我只是建议你不要将他们的示例作为使用ASP.NET Razor的绝对单一方式。