如何在没有循环或jquery的mvc中使用模型类添加动态控件

Posted

技术标签:

【中文标题】如何在没有循环或jquery的mvc中使用模型类添加动态控件【英文标题】:How to add dynamic controls using model class in mvc without loop or jquery 【发布时间】:2019-08-23 15:38:44 【问题描述】:

如何在没有循环的情况下将模型类转换为视图中的动态控件?我想创建 if checkbox 而不是 show checkbox control if dropdown 而不是 show dropdown if text 而不是创建文本框。

 public class DataSources
    

        public int Id  get; set; 
        [DisplayName("text")]
        public string Name  get; set; 
        [DisplayName("text")]
        public string Phone  get; set; 
        [DisplayName("checkbox")]
        public bool Active  get; set; 

        [DisplayName("dropdown")]
        //[Column(TypeName = "dropdown")]
        public List<DataSources> MyList  get; set; 

    

【问题讨论】:

请澄清您在第二句话中的意思。你的意思是如果选中了一个复选框,那么会出现一个额外的复选框和下拉菜单? 提供更多细节。问题不清楚 【参考方案1】:

您可以使用Editorfor html 助手,它根据模型类型绑定控件。例如,如果类型是字符串,那么它将采用文本框,如果是列表,它将绑定下拉列表:

@Html.EditorFor(model => model.Propertyname)

详细解释可以在这里找到链接-https://www.steelcm.com/how-to-use-the-html-editor-for-method/

【讨论】:

您可以添加如下类:@Html.EditorFor(x=> x.MyProperty, new htmlAttributes = new @class= "MyCssClass" )。当你说完整的课程时,我不明白。 我说的是那个模型类,没有添加属性名称。只有一行用于创建没有循环的控件 类只有用于设置显示名称、验证的属性。我不记得任何用于动态生成控件的属性。【参考方案2】:

该类不支持任何此类属性来动态管理这些东西。实现这一点的一种方法如下:

我的 ActionResult 方法是这样的(将其视为示例数据):

DataSource model = new DataSource();
model.MyList = new List<DataSource>();
var data = new DataSource()

    Id = 1,
    Name = "test"
 ;
 model.MyList.Add(data);
 return View(model);

这会将数据返回给视图。您的视图应如下所示:

@model MVCApp.Models.DataSource

@if (Html.DisplayNameFor(x => x.Name).ToString() == "text")

    @Html.TextBoxFor(model => model.Name)

@if (Html.DisplayNameFor(x => x.Phone).ToString() == "text")

    @Html.TextBoxFor(model => model.Phone)


@if (Html.DisplayNameFor(x => x.Active).ToString() == "checkbox")

    @Html.CheckBoxFor(model => model.Active)

@if (Html.DisplayNameFor(x => x.MyList).ToString() == "dropdown")

    @Html.DropDownListFor(m => m.Id,
                new SelectList(Model.MyList.Select(x=>x.Name)),
                "-- Select --")

这对我有用。 您需要创建自己的 HTML 助手来更有效地实现这一目标。

如果这有帮助,请告诉我!

【讨论】:

【参考方案3】:

我明白你想要什么,你想显示控件只使用一行而不是你可以使用这个

@model MVCApp.Models.DataSource
@Html.EditorForModel()

通过使用它自动创建动态控件。

【讨论】:

谢谢我想用这样的东西,我用它来工作。

以上是关于如何在没有循环或jquery的mvc中使用模型类添加动态控件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jQuery $.ajax() 发布请求中向 MVC 控制器方法发送模型

如何将 MVC 模型传递给 UI 引导模式

通过 Jquery 保存到 MVC 模型输入后如何在 Html 中显示记录

MVC5 视图:在模型中循环时设置并获取索引

如何使用 jquery 或 ajax 在 c#/asp.net 中为 MVC 项目更新 razor 部分视图

如何在 MVC 5 项目中使用 Json.NET 进行 JSON 模型绑定?