ASP.NET MVC 视图异常输出泛型类型、ActionLink生成URL异常问题
ASP.NET MVC 视图异常问题定位与修复
页面开头冗余输出问题
- 问题成因:视图顶部的模型声明语法存在大小写错误。Razor 语法严格区分大小写,用于指定强类型视图模型的指令是全小写的
@model,原代码错写为大写开头的@Model。大写的@Model是 Razor 引擎内置属性,直接指向当前控制器传递到视图的List<Department>实例,会被直接渲染到页面上;后续跟随的List<StockEdgeTest.Models.Department>纯文本会被原样输出,最终形成你看到的类型字符串冗余行。 - 修复方式:将视图顶部的
@Model List<StockEdgeTest.Models.Department>修改为@model List<StockEdgeTest.Models.Department>,修改后冗余输出会直接消失。
ActionLink 生成错误 URL 的问题
- 问题成因:两处语法错误叠加导致的方法重载错配,最终生成了不符合预期的链接:
- 循环语句语法冗余:
@foreach (Department dep in @Model)属于 Razor 代码块上下文,无需给上下文内的Model变量额外添加@前缀,多余的@会干扰引擎解析逻辑。 Html.ActionLink参数数量不匹配:你当前传入了4个参数,引擎错误匹配到了ActionLink(string linkText, string actionName, object routeValues, object htmlAttributes)这个4参数重载。本该作为控制器名称的"Employee"字符串被当成了路由参数对象,字符串类型的公共属性Length(值为8,对应"Employee"的字符长度)会被写入路由参数;同时因为没有传入正确的控制器名称参数,路由生成器会匹配当前请求的默认路径,最终拼出/?Length=8的错误链接。
- 循环语句语法冗余:
- 修复方式:
- 修正循环语法,去掉
Model前多余的@:将@foreach (Department dep in @Model)修改为@foreach (Department dep in Model)。 - 给
Html.ActionLink补上最后一个htmlAttributes参数(传null即可),让引擎正确匹配到支持指定控制器名称的5参数重载:@Html.ActionLink(dep.DepartmentName, "Index", "Employee", new { DepartmentID = Convert.ToInt32(dep.DepartmentID) }, null)
- 修正循环语法,去掉
修复后完整视图代码参考
@model List<StockEdgeTest.Models.Department> @using StockEdgeTest.Models @{ ViewBag.Title = "Department List"; } <div style="font-family:'Agency FB'"> <h2>Department List</h2> <ul> @foreach (Department dep in Model) { <li> @Html.ActionLink(dep.DepartmentName, "Index", "Employee", new { DepartmentID = Convert.ToInt32(dep.DepartmentID) }, null) </li> } </ul> </div>
内容的提问来源于stack exchange,提问作者Somsubhra Dragoon Bhattacharya
相关产品推荐
相关产品推荐

