MVC项目中option标签助手报错:属性声明区不能包含C#代码
解决MVC中option标签助手禁止在属性区写C#代码的问题
问题原因
MVC的option标签助手会自动解析元素属性,直接在属性声明区域内嵌C#代码会触发标签助手的校验规则,导致报错。以下是几种可行的解决方式:
方法1:禁用单个option的标签助手
在option标签前添加!,让Razor跳过标签助手解析,保留原有代码逻辑:
<option! value="10" @(Model.ItemsTo == 10 ? "selected" : "")>10</option> <option! value="25" @(Model.ItemsTo == 25 ? "selected" : "")>25</option> <option! value="50" @(Model.ItemsTo == 50 ? "selected" : "")>50</option>
方法2:使用MVC标签助手标准绑定(推荐)
这种方式更符合MVC开发规范,无需手动维护选中状态:
- 模型层添加SelectList属性
public class YourModel { public int ItemsTo { get; set; } public SelectList ItemsPerPageList { get; set; } } - 控制器初始化选项列表
public IActionResult YourAction() { var model = new YourModel(); // 构造分页选项 var pageOptions = new List<SelectListItem> { new() { Value = "10", Text = "10" }, new() { Value = "25", Text = "25" }, new() { Value = "50", Text = "50" } }; // 绑定选中值(ItemsTo) model.ItemsPerPageList = new SelectList(pageOptions, "Value", "Text", model.ItemsTo.ToString()); return View(model); } - 视图中使用select标签助手
系统会自动根据<select asp-for="ItemsTo" asp-items="Model.ItemsPerPageList" class="form-select"></select>ItemsTo的值匹配并选中对应option。
方法3:将逻辑移至代码块
先在视图顶部定义选中状态变量,再在option中引用:
@{ var selected10 = Model.ItemsTo == 10 ? "selected" : ""; var selected25 = Model.ItemsTo == 25 ? "selected" : ""; var selected50 = Model.ItemsTo == 50 ? "selected" : ""; } <option value="10" @selected10>10</option> <option value="25" @selected25>25</option> <option value="50" @selected50>50</option>
内容的提问来源于stack exchange,提问作者GrootStack
相关产品推荐
相关产品推荐

