首页 > 解决方案 > 如何根据行中另一列的值动态地将值分配给 MVC 网格

问题描述

我目前有一个数据集,其中有 4 列的值让我们称它们为奇数低、奇数高和偶数低、偶数高,我想在网格中有两列(低和高),并根据另一列的值设置值将只是 'O' 或 'E' - 此列名为 side

这是一个快速示例(现在该列仅绑定到奇数字段)

 columns.Add(model => model.ODD_LOW).Titled("Low House #").Sortable(sortable);
columns.Add(model => model.ODD_HIGH).Titled("High House #").Sortable(sortable);
columns.Add(model => model.SIDE).Titled("Side").Sortable(sortable);

我的猜测是我需要使用脚本来完成此操作,但我不确定如何动态访问行和字段。

标签: c#asp.net-mvcgrid

解决方案


在您描述的场景中,我认为不需要动态数据网格。

使用 MVC 时,最好使用 ViewModel 对象来表示数据。这样,您的控制器负责从您的业务/服务层获取数据并将结果映射到您的 ViewModel 对象。

使用这种方法,您可以使用视图的属性创建一个对象,并将其绑定到您的 gridview 和其他控件。

您的 ViewModel 对象将如下所示:

public class MyViewModelItem {
    public int LowHouse { get; set; }
    public int HighHouse { get; set; }
    public char Side { get; set; }
}

public class MyViewModel {
    // Your other view's properties

    public List<MyViewModelItem> List { get; set; }
}

你的控制器是这样的:

public class MyController : Controller {
    private readonly IMyService myService;

    public MyController()
    {
        myService = new MyService(); // Consider Dependency Injection
    }

    public ActionResult Index() {
        var data = myService.List();
        var myModel = MapMyModel(data);

        return View(myModel);
    }

    private MyViewModel MapMyModel(IEnumerable<YOUR_ENTITY> data) {
        var myModel = new MyViewModel();
        myModel.List = new List<MyViewModelItem>();

        foreach (var item in data)
        {
            myModel.List.Add(new MyViewModelItem {
                LowHouse = item.ODD_LOW,
                HighHouse = item.ODD_HIGH,
                Side = [your logic]
            })
        }
    }
}

参考:

  1. 使用 ViewModel 在 ASP.NET MVC 应用程序中管理数据和组织代码
  2. ASP.NET MVC 视图模型模式

推荐阅读