在asp.net mvc中创建动态字段

时间:2017-04-30 05:54:28

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

我有表user,其中包含管理员添加的用户的其他自定义字段中的字段。 sql click this to diagram explain this

所以我想创建包含用户字段和自定义字段的Register页面。 我要列出FiledTypeFieldName。 在Controler:

public ActionResult Index()
    {
        ViewBag.CustomeFields = userCustomeFields.GetCustomeField();
        return View();
    }

UserField模型:

public class UserField
{
    public string FieldName;
    public string FieldTypeName;
}

所以我想在cshtml文件中创建动态字段。 我写了这段代码: 的更新

 @foreach (var item in ViewBag.CustomeFields)
    {
        <div class="form-group">
            @*@Html.LabelFor(i=>item.FieldTypeName  , htmlAttributes: new { @class = "control-label col-md-2" })*@
            <div class="col-md-10">
                @if (item.FieldTypeName == "Textbox")
                {
                    @Html.TextBox(item.FieldName)
                }
                </div>
            </div>
                    @*@Html.Editor(item.FieldName, new { htmlAttributes = new { @class = "form-control" } })*@
                    }

但是我给错了! HtmlHelper<User>' has no applicable method named 'TextBox' but appears to have an extension method by that name. Extension methods cannot be dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the extension method syntax. 我不知道我的方式是否正确?!

1 个答案:

答案 0 :(得分:0)

这里再次回答你的第一个问题,万一你想把它标记为正确答案^^

你必须像今天一样投射它

@foreach(UserField item in ViewBag.CustomFields) {

@Html.TextBox(((UserField)item).FieldName) 

或     @ Html.TextBox((字符串)item.FieldName)

对于属性,您可以使用带有new { ... }

的匿名类型对象
@Html.TextBox("nameOfTheTexbox", "initialValue", new { @class ="myCssClass myOtherCssClass", disabled = "disabled" })