我想从头开始构建一个动态表单,并且我已经创建了以下元素:
包含我要显示的所有字段的 xml 文件:
<?xml version="1.0" encoding="utf-8" ?>
<Fields>
<FieldList>
<Field>
<Type>checkbox</Type>
<Name>gender</Name>
<DefaultValue>false</DefaultValue>
<CssClass>myclass</CssClass>
</Field>
<Field>
<Type>textbox</Type>
<Name>name</Name>
<DefaultValue>fill name</DefaultValue>
<CssClass>formtextbox</CssClass>
</Field>
</FieldList>
</Fields>
输入到我用来反序列化 xml 的类的视图:
@model Fields
@{
if(Model!=null)
{
using (Html.BeginForm())
{
foreach (Field field in Model.FieldList)
{
switch(field.Type)
{
case "textbox":
@Html.TextBox(field.Name, field.DefaultValue);
break;
case "checkbox":
@Html.CheckBox(field.Name,Convert.ToBoolean(field.DefaultValue));
break;
}
}
}
}
}
目前该应用程序正常运行,但我有以下疑问:
1)我认为这不是一个优雅的解决方案,因为我必须在视图中放置太多代码,对吧?
2)我现在想添加一些服务器验证。我通常使用数据注释,但我想这是不可能的,因为我不知道我提交的东西是怎样的。有什么方法可以动态创建类实例并动态添加数据注释?
3)我创建了另一个处理帖子的动作和控制器。因为我不知道我提交的操作是什么,所以我没有收到任何参数。我想我必须从我的行动中使用 Request.Form 对吗?