C# 代码和带有“@:”的 HTML 之间的转换在特定 Contoso 大学教程中不被理解

本文关键字:Contoso 大学 教程 之间 代码 HTML 转换 | 更新日期: 2023-09-27 18:30:41

我一直在复习 asp.net Contoso 大学的教程,C# 代码和 HTML 标记(使用"@:")之间有两个特定的转换,我无法理解:

1)

@:<td>

我读到,当 ASP.NET 看到开始的HTML标签时,它会自动将代码视为HTML标记。如果是这样,为什么在这里使用"@:"?

2)

@course.CourseID @: @course.Title

为什么"@:"在代码行的中间而不是在开头?

完整视图代码如下。提前感谢任何试图提供帮助的人。

<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>

C# 代码和带有“@:”的 HTML 之间的转换在特定 Contoso 大学教程中不被理解

简而言之,它是用来告诉将这个文本呈现为纯html的,不要认为它是C#代码。

在您的特定情况下,它用于在 CourseId 和课程标题之间添加空格:

@course.CourseID @:  @course.Title
@course.CourseID是 C# 代码,当 @:

出现时,它现在是纯文本,然后当 @course.Title 来时,它被认为是 C# 代码,所以 @: 是指定它是纯 HTML 而不是 C# 代码。

1)你对HTML标签的行为是正确的。他们可以使用<td>而不是@:<td>.

2)你也是对的,关于@course.CourseID @: @course.Title.我也不清楚他们为什么选择使用这种模式。如果他们使用@course.CourseID @course.Title,它将同样工作.

您可以自己尝试,看看您得到相同的结果和输出。

我只是建议你不要把他们的示例工作作为使用 ASP.NET Razor的绝对单一方式。