ASP.NET MVC:如何根据存储在数据库表中的HTML详细信息在运行时动态创建剃刀视图表单

时间:2019-06-09 16:47:24

标签: c# asp.net-mvc

带有数据的表结构的屏幕截图 表结构如下:

Id | Category | DisplayName | FieldName | FieldType | FieldLength | IsRequired

有关详细信息,请参见屏幕截图。

在选择类别后,表格中针对该类别定义的所有HTML字段都应在视图中填充。

以及如何在表单提交时进行验证。

我有400多个类别。

1 个答案:

答案 0 :(得分:0)

这是我想你可以做的。

首先声明一个SampleClass并将其命名为任意名称,我将使用public class SampleClass { public int Id { get; set; } public string Category { get; set; } public string DisplayName { get; set; } public string FieldName { get; set; } public string FieldType { get; set; } public string FieldLength { get; set; } public int IsRequired { get; set; }//you can convert this to boolean to make it easier }

//assuming you are using linq
var allEntry = context.Table.Where(m => m.Category == SelectedCategory);
var allViews = new List<SampleClass>();
foreach (var entry in allEntry)
{
    allViews.Add(new SampleClass
    {
        FieldName = entry.FieldName,
        //and so on...

    });
}

第二,从Controller中的db填充此类

@using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post, new { @class = "forms-horizontal", role = "form" }))
{
    <div class="form-horizontal">
        <h4>Title of the form</h4>
        <hr /><br />
        @foreach (var a in List<SampleClass>)//note this(List<SampleClass>) will be passed from the controller to the view.
        {
            switch (a.FieldType)
             {
                case "Test":
                    <div class="form-group">
                        <label for="@a.FieldName"></label>
                        <input id="@a.FieldName" type="text" name="@a.FieldName" required="@(a.IsRequired == 1 ? "required" : "")" />
                    </div>
                    break;
                case "Number":
                    <div class="form-group">
                        <label for="@a.FieldName"></label>
                        <input id="@a.FieldName" type="number" name="@a.FieldName" required="@(a.IsRequired == 1 ? "required" : "")" />
                    </div>
                    break;
                case "Select":
                    <div class="form-group">
                        <label for="@a.FieldName"></label>
                        @Html.DropDownList(a.FieldName, new SelectList(DbUtils.GetEvaluations(), "Value", "Text", null), "Select..", new { @required = @a.IsRequired == 1 ? "required" : "" })
                    </div>
                    break;
            }
        }
        <div class="form-group">
            <div class="col-md-offset-3 col-md-9">
                <input type="submit" value="Submit" class="btn btn-primary" />
            </div>
        </div>
    </div>
}

第三,并按照我在评论中所说的那样做

cases

您可以选择更多module test; reg a; initial begin a = 1'b0; a <= 1'b1; $display(a); end endmodule

希望这会有所帮助。