You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:03:04