如何将字符串作为模型传递给分部视图?及编译错误排查
问题解决:修复分部视图编译错误及字符串模型传递方法
一、修复当前编译错误
你的编译错误源于Razor视图中partial标签的model属性语法问题:
- 嵌套双引号冲突:
model属性值内的"test"与外层属性的双引号冲突,导致解析失败 - 未用Razor表达式包裹C#代码:直接在HTML属性中编写C#对象初始化逻辑,需要用
@()包裹
修改后的主视图代码:
@model ProjectName.Views.FoodMenu._DishItemCardModel <partial name="_DishItemCard" model='@(new ProjectName.Views.FoodMenu._DishItemCardModel { dishName = "test" })' />
也可使用HTML转义字符处理双引号:
@model ProjectName.Views.FoodMenu._DishItemCardModel <partial name="_DishItemCard" model="@(new ProjectName.Views.FoodMenu._DishItemCardModel { dishName = "test" })" />
二、将字符串作为模型传递给分部视图
若只需传递单个字符串而非复杂模型,按以下步骤操作:
1. 修改分部视图的模型声明
更新_DishItemCard.cshtml的模型类型为string:
@model string <div>@Model</div> <div>@Model</div> <div>@Model</div>
(若不再需要_DishItemCardModel类,可删除对应的_DishItem.cshtml.cs文件)
2. 在主视图中调用分部视图
直接用@()包裹字符串传递:
@model ProjectName.Views.FoodMenu._DishItemCardModel <!-- 传递硬编码字符串 --> <partial name="_DishItemCard" model="@("测试字符串")" /> <!-- 传递主视图模型的字符串属性 --> <partial name="_DishItemCard" model="@Model.dishName" />
额外说明
- Razor视图中,HTML属性内的C#表达式必须用
@()包裹,否则会被当作普通字符串解析 - 处理字符串嵌套时,优先用单引号包裹外层属性值,避免双引号冲突;或用
"作为双引号的HTML转义字符
内容的提问来源于stack exchange,提问作者Kelvin
相关产品推荐
相关产品推荐

