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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (24)

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

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

请查看截图了解详情。

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

以及如何验证表单提交。

我有400多个类别。

提问于
用户回答回答于

这是我认为你可以做的。

首先声明一个class名字叫它,我会用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
}

其次,从Controller中的db填充此类

//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...

    });
}

第三,正如我在评论中所说的那样

@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在选择中拥有更多内容

希望这可以帮助..

扫码关注云+社区

领取腾讯云代金券