在.NET Core MVC中,CSHTML是使用Razor C#语法的HTML视图文件,主要用于动态生成网页内容。以下从定义、语法特点、功能作用及示例四个方面详细解释:
一、CSHTML的定义与本质
CSHTML(C# HTML)是ASP.NET Core MVC框架中的视图文件,后缀名为.cshtml
。它结合了HTML标记与服务器端C#代码,通过Razor语法引擎在服务器端执行后生成标准HTML响应给客户端。这种文件由微软开发,属于ASP.NET Razor网页的一种实现形式,主要用于分离业务逻辑与页面展示。
二、核心语法特点
-
内联表达式
使用@
符号嵌入C#变量或表达式,直接输出到HTML中。例如:html<p>当前时间:@DateTime.Now</p>
渲染结果为:
<p>当前时间:2025-08-09 22:33:09</p>
。 -
代码块
多行C#代码通过@{}
包裹,可定义变量或执行逻辑。例如:html@{ var userName = "张三"; var isAdmin = true; } <p>用户:@userName,管理员:@isAdmin</p>
输出结果为:
<p>用户:张三,管理员:True</p>
。 -
控制结构
支持条件判断(if
/else
)和循环(for
/foreach
)。例如遍历列表:html<ul> @foreach (var item in Model.Products) { <li>@item.Name - ¥@item.Price</li> } </ul>
若
Model.Products
包含商品数据,将生成动态列表项。
三、功能与作用
-
布局与复用
通过_Layout.cshtml
定义公共模板(如页头、页脚),子视图通过@{ Layout = "_Layout"; }
引用,避免重复代码。例如_Layout.cshtml
中:html<!DOCTYPE html> <html> <head>@RenderSection("Head", false)</head> <body>@RenderBody()</body> </html>
子视图只需填充
@RenderBody()
部分内容。 -
模型绑定
通过@model
指令声明强类型模型,实现类型安全的视图数据传递。例如:html@model IEnumerable<Product> <h1>商品列表(共 @Model.Count() 种)</h1>
直接访问
Model
属性并调用方法(如Count()
)。 -
HTML辅助方法
使用内置方法生成表单元素,如@Html.DropDownList
创建下拉框:html@Html.DropDownList("CategoryId", Model.Categories, "请选择分类")
自动渲染
<select>
标签并绑定选项。
四、完整示例
假设有一个商品详情页(Product.cshtml
),结合模型、布局和动态内容:
html
@model Product
@{
Layout = "_Layout";
ViewBag.Title = Model.Name;
}
<h1>@Model.Name</h1>
<p>价格:¥@Model.Price</p>
@if (Model.IsInStock) {
<p style="color:green;">✓ 现货供应</p>
} else {
<p style="color:red;">× 暂时缺货</p>
}
<h3>用户评论</h3>
<ul>
@foreach (var comment in Model.Comments) {
<li>@comment.User: @comment.Text</li>
}
</ul>
此示例展示了模型绑定(@model Product
)、条件渲染(if/else
)、循环(foreach
)及布局引用(Layout = "_Layout"
)的综合应用。
通过CSHTML,开发者能高效构建动态、可维护的Web界面,同时利用C#的强大功能处理复杂逻辑,是.NET Core MVC开发的核心组件之一。