gpt4 book ai didi

Asp.net MVP - 创建动态控件,在哪里?

转载 作者:行者123 更新时间:2023-12-04 05:34:37 25 4
gpt4 key购买 nike

所以,我正在尝试重写一个旧的 asp.net 应用程序,并认为这次我会在 MVP 中这样做。
该应用程序通过在表格中放置标签和输入字段来显示动态生成的表单。

我从我的模型中得到的是一个实体列表,这些实体描述了应该呈现哪些控件。

现在需要将此列表转换为每行带有标签和控件的表格,但我无法决定在哪里以及如何执行此操作。

这些是我能想到的场景,但我不知道根据 MVP 哪个是正确的:

  • 为每个项目在演示者中创建一个表格行并调用 View.AddRow(row)
  • 在presenter中创建表格行列表并调用View.AddRows(list)
  • 对于每个项目,请调用 View.CreateRow(info)

  • 有任何想法吗?

    谢谢!

    最佳答案

    MVP 模式的关键是分离 View 和演示者之间的关注点。演示者只需设置实体列表,数据是否使用 GridView、Repeater 等以表格形式呈现是 View 的关注点。

    如果我按照您的描述进行操作,我将使用“ View 模型”类作为创建控件的包装器:

    public class DynamicControlViewModel
    {
    public enum ControlTypes
    {
    TextBox,
    DropDown,
    CheckBox
    }

    public string LabelValue { get; set; }
    public ContrlTypes ControlType { get; set; }
    }

    我的 View 如下所示:
    interface IDynamicControlsView
    {
    IEnumerable<DynamicControlViewModel> DynamicControls { set; }
    }

    还有主持人:
    // This method would be called within your Presenter
    public override void Initialize()
    {
    _view.DynamicControls = ConvertDataToViewModel(data); // your method to fetch the data would replace 'data'
    }

    View 实现的属性 setter (后面的 .ASPX 代码)将如下所示:
      public IEnumerable<DynamicControlViewModel> DynamicControls
    {
    set
    {
    foreach (DynamicControlViewModel model in value)
    {
    // build up user controls here....
    switch (model.ControlType)
    {
    case DynamicControlViewModel.ContrlTypes.TextBox:
    // add text box
    break;
    case DynamicControlViewModel.ContrlTypes.DropDown:
    // add drop down
    break;
    case DynamicControlViewModel.ContrlTypes.CheckBox:
    // add checkbox
    break;
    default:
    throw new ArgumentOutOfRangeException();
    }
    }
    }
    }

    使用 View 模型将使单元测试更容易,并保持更清晰的关注点分离。

    关于Asp.net MVP - 创建动态控件,在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12122457/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com