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

如何将返回JsonResult的Controller中ViewBag值传入Razor视图隐藏字段

问题根源

返回JsonResult的Controller方法不会触发Razor视图的渲染流程,ViewBag的赋值无法传递到视图——因为JsonResult是直接输出JSON响应,跳过了视图绑定、ViewBag传递的环节,所以视图里读取@ViewBag.CanUserEdit自然是空值。

解决方案

根据你的业务场景选择对应方案:

方案1:改用ViewResult返回视图(适合需要渲染页面+传递状态的场景)

如果你的需求是展示页面同时传递状态值,将Action的返回类型改为ViewResult,正常赋值ViewBag:

public ActionResult Person()
{
    ViewBag.CanUserEdit = true;
    ViewBag.AllowLink = false;
    // 业务数据可存入ViewBag或ViewModel
    ViewBag.PersonInfo = new { Name = "张三", Age = 30 };
    return View();
}

在Razor视图中添加隐藏字段:

<input type="hidden" id="CanUserEdit" value="@ViewBag.CanUserEdit" />
<input type="hidden" id="AllowLink" value="@ViewBag.AllowLink" />

外部JS文件中获取值:

// 注意布尔值在HTML中会被转为字符串,需要转成布尔类型
const canUserEdit = document.getElementById('CanUserEdit').value === 'True';
const allowLink = document.getElementById('AllowLink').value === 'True';

方案2:将状态值并入JSON返回(适合AJAX请求场景)

如果必须用JsonResult返回数据,直接把状态字段和业务数据合并到返回的JSON对象中:

public JsonResult Person()
{
    var personData = new { Name = "张三", Age = 30 };
    var response = new 
    {
        Data = personData,
        CanUserEdit = true,
        AllowLink = false
    };
    return Json(response, JsonRequestBehavior.AllowGet);
}

前端AJAX请求成功后,手动创建隐藏字段存储状态值:

$.ajax({
    url: '/你的控制器名/Person',
    type: 'GET',
    success: function(res) {
        // 创建CanUserEdit隐藏字段
        const canEditInput = document.createElement('input');
        canEditInput.type = 'hidden';
        canEditInput.id = 'CanUserEdit';
        canEditInput.value = res.CanUserEdit;
        document.body.appendChild(canEditInput);

        // 创建AllowLink隐藏字段
        const allowLinkInput = document.createElement('input');
        allowLinkInput.type = 'hidden';
        allowLinkInput.id = 'AllowLink';
        allowLinkInput.value = res.AllowLink;
        document.body.appendChild(allowLinkInput);

        // 处理业务数据
        console.log(res.Data);
    }
});

方案3:用TempData临时存储(仅限特定场景,不推荐)

如果一定要在返回JsonResult后让视图拿到值,可使用TempData(依赖Session,且值读取一次后会被清除):

public JsonResult Person()
{
    TempData["CanUserEdit"] = true;
    TempData["AllowLink"] = false;
    return Json(new { Name = "张三" }, JsonRequestBehavior.AllowGet);
}

视图中读取TempData并生成隐藏字段:

<input type="hidden" id="CanUserEdit" value="@TempData["CanUserEdit"]" />
<input type="hidden" id="AllowLink" value="@TempData["AllowLink"]" />

内容的提问来源于stack exchange,提问作者M-Fulu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:18:19