如何通过ViewBag将控制器数据传递至HTML页面?已尝试但失败
如何在ASP.NET MVC中将控制器的值传递到HTML页面
首先得指出你代码里的一个明显问题:控制器中变量名大小写不一致——你定义的是dbSchool,但判断非空时写的是dbschool,这会直接导致编译错误,大概率是你用ViewBag没成功的原因之一,先把这个修正过来。
下面给你几种常用且可靠的传递方式:
1. 修正后使用ViewBag(快速便捷的弱类型方式)
先修正控制器里的变量名错误,再给ViewBag赋值:
// 遵循C#命名规范,类名和变量名首字母大写 SchoolBLL schoolBLLContent = new SchoolBLL(); DatabaseSchool dbSchool = schoolBLLContent.GetSchoolInfoById(LoginStaffId); if (dbSchool != null) { // 将text_content赋值给ViewBag的自定义属性 ViewBag.SchoolText = dbSchool.text_content; }
然后在你的.cshtml视图文件中,就可以直接调用ViewBag的值了:
<!-- 先判断值是否存在,避免空引用异常 --> @if (!string.IsNullOrEmpty(ViewBag.SchoolText)) { <!-- 直接显示纯文本内容 --> <p>学校内容:@ViewBag.SchoolText</p> <!-- 如果text_content本身包含HTML标签,需要解析渲染的话,使用Html.Raw --> <div class="school-content-box"> @Html.Raw(ViewBag.SchoolText) </div> }
2. 使用强类型模型(推荐,类型更安全)
如果你的页面需要展示的字段不止text_content,或者想避免弱类型的潜在拼写错误,强类型模型是更稳妥的选择:
控制器代码
// 替换成你实际的Action名称 public ActionResult ShowSchoolInfo() { SchoolBLL schoolBLLContent = new SchoolBLL(); DatabaseSchool dbSchool = schoolBLLContent.GetSchoolInfoById(LoginStaffId); // 将模型直接传递给视图 return View(dbSchool); }
视图代码
在视图最顶部,指定要使用的模型类型(替换成你的项目命名空间):
@model YourProjectName.Models.DatabaseSchool @if (Model != null) { <h3>学校详情</h3> <p>内容:@Model.text_content</p> <!-- 解析HTML标签的写法 --> <div class="rich-content"> @Html.Raw(Model.text_content) </div> }
3. 使用ViewData(和ViewBag类似的弱类型方式)
ViewData和ViewBag本质逻辑一致,只是存储形式不同:
控制器代码
if (dbSchool != null) { ViewData["SchoolTextContent"] = dbSchool.text_content; }
视图代码
@if (ViewData["SchoolTextContent"] != null) { <div>@ViewData["SchoolTextContent"]</div> }
总结一下:先修正代码里的变量名大小写错误,再根据你的场景选合适的传递方式——强类型模型是最推荐的,它能提供编译时检查,避免很多低级错误。
内容的提问来源于stack exchange,提问作者FENR1R Ace
相关产品推荐
相关产品推荐

