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

ASP.NET Core MVC中如何将列的0/1值转换为Open/Closed展示

问题解决方案

首先修正你现有代码的问题

你的原有代码存在3个致命错误:

  • 两个属性的get方法互相调用,会触发无限递归,最终抛出栈溢出异常
  • 映射逻辑写反,需求为1对应Open、0对应Closed,原有代码1返回的是Closed
  • 语法错误:else后不能直接跟判断条件,需要改为else if

第一步:修改ViewModel定义

直接新增只读计算属性返回映射后的文本,避免互相调用:

// 存储数据库读取的原始0/1值,Controller从数据库查值后赋值给这个属性
public int Closed { get; set; }

// 只读计算属性,直接根据原始值返回映射文本
public string ClosedStatus
{
    get
    {
        return Closed == 1 ? "Open" : "Closed";
    }
}

第二步:Controller端处理

不需要做额外的转换逻辑,只需要在读取数据库数据时,把原始的Closed字段值赋值给ViewModel的对应属性即可,示例代码:

public ActionResult YourPageAction()
{
    // 从数据库查询原始数据,映射到ViewModel
    var bdgList = _dbContext.Bdgfixmonths.Select(dbItem => new BdgfixmonthViewModel
    {
        Closed = dbItem.Closed, // 直接赋值数据库的0/1原始值
        // 其他需要的字段赋值
    }).ToList();

    // 封装到页面对应的总ViewModel
    var pageViewModel = new YourPageViewModel
    {
        Bdgfixmonths = bdgList
    };

    return View(pageViewModel);
}

第三步:视图中访问ViewModel属性

直接调用我们新增的计算属性即可,不需要访问原始的Closed字段:

<tbody>
    @foreach (var item in Model.Bdgfixmonths)
    {
        <td>
            @item.ClosedStatus
            <!-- 也可以用DisplayFor写法:@Html.DisplayFor(modelItem => item.ClosedStatus) -->
        </td>
    }
</tbody>

关于访问ViewModel变量的说明

只要你在ViewModel中定义了对应的属性,Controller完成赋值后,视图中就可以直接通过item.属性名访问,不需要关联原始数据库实体的字段,完全和数据库Model解耦。

内容的提问来源于stack exchange,提问作者chdev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:48:03