【问题标题】:How to build a GENERIC ASP. NET MVC CRUD VIEW using object as model如何构建通用 ASP。 NET MVC CRUD VIEW 使用对象作为模型
【发布时间】:2014-08-17 12:34:03
【问题描述】:

我想为任何模型创建 MVC 通用 CRUD 视图... 让我们有 2 个模型

public class MyObject1 {
    Display(Name = "Attribute 11", ShortName = "A11")]
    public String attribute11 { get; set; }
    Display(Name = "Attribute 12", ShortName = "A12")]
    public String attribute12 { get; set; }
}

public class MyObject2 {
    Display(Name = "Attribute 21", ShortName = "A21")]
    public String attribute21 { get; set; }
    Display(Name = "Attribute 22", ShortName = "A22")]
    public String attribute21 { get; set; }
}

我尝试构建一个独立于两个模型的创建视图,第一次尝试是遍历模型的公共属性(MyObject1 或 MyObject2)并尝试从中重建视图。

@model Object
@{
    Type myType = Model.GetType();
    System.Reflection.PropertyInfo[] myProps = myType.GetProperties();
}
@using (Html.BeginForm()) {
    foreach (var f in myProps)
    {
        <div>
            @Html.LabelFor(o => f.Name)
            <div>
                @Html.EditorFor(o => f.Name)
                @Html.ValidationMessageFor(o => f.Name)
            </div>
        </div>
    }
    <div>
        <input type="submit" value="Create"/>
    </div>
}

结果

  • 标签显示字符串“名称”(!),我想显示相应的 DisplayName 元数据
  • 由于 f.Name,编辑器正在显示属性名称(attribute11、attribute 12、...)。我无法显示值...
  • 我还没有检查 ValidationMessage

任何想法如何管理这个?

谢谢

【问题讨论】:

    标签: c# asp.net asp.net-mvc crud


    【解决方案1】:

    只需使用@Html.EditorFor(model=&gt;model),您的视图应该是这样的:

    @model Object
    @using (Html.BeginForm()) {
        <div>
                @Html.EditorFor(model => model)
        </div>
        <div>
            <input type="submit" value="Create"/>
        </div>
    }
    

    【讨论】:

    • 您认为使用这种方法可以在视图中丢弃/隐藏模型的属性之一吗?谢谢。
    • 如果你想隐藏属性,你的模型属性有 attirbute [HiddenInput(DisplayValue = false)]。它将生成隐藏输入。如果您不想显示任何内容,请使用 attribue [ScaffoldColumn(false)]
    猜你喜欢
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 2011-05-27
    • 2023-03-18
    • 2017-12-29
    相关资源
    最近更新 更多