Asp.net 根据请求C添加TextBocex、复选框#
我将很快在我的公司开始一个项目,客户希望在门户中作为管理员添加文本框或复选框,,,因此,最初我可能会 名称[文本框] 电话[文本框]Asp.net 根据请求C添加TextBocex、复选框#,asp.net,c#-4.0,Asp.net,C# 4.0,我将很快在我的公司开始一个项目,客户希望在门户中作为管理员添加文本框或复选框,,,因此,最初我可能会 名称[文本框] 电话[文本框] 因此,客户端希望以管理员身份登录,并能够添加 名称[文本框] 电话[文本框] 接收宣传册[复选框]//由客户端添加 忘记门户和管理部分。。我想知道的是设计这个的最佳方式是什么(用户能够添加元素) 任何想法都将不胜感激 从我过去所做的工作来看,我必须根据客户需求创建一个动态调查。我有一个包含以下表格的数据库: 调查-存储客户调查的列表 控件-列出所需控件的类型。例
因此,客户端希望以管理员身份登录,并能够添加 名称[文本框] 电话[文本框] 接收宣传册[复选框]//由客户端添加 忘记门户和管理部分。。我想知道的是设计这个的最佳方式是什么(用户能够添加元素) 任何想法都将不胜感激
从我过去所做的工作来看,我必须根据客户需求创建一个动态调查。我有一个包含以下表格的数据库:
然后,我添加了一些逻辑,以便根据从我的数据库中读取的值选择的调查动态创建控件。您可以创建一个附加的aspx表单,用户(或管理员)可以在其中定义和创建自己的表单,您提供变量名,他们选择添加控件,将其保存在数据库中的特定方案中,例如 用户表单: 用户ID格式 表格: FormID FormName FormElement: FormID VariableName控件类型索引 当然,这也可以由管理员完成,并且每个人都可以看到 要查看特定表单,您可以添加另一个包含以下代码的aspx页面:
protected void Page_Load(object sender, EventArgs e)
{
//you saved the FormName or ID to Session when you accessed it
string formName = Session["FormName"].ToString();
//this handles getting the elements for this Form from DB
List<FormElement> elementList = FormElement.GetForForm(formName);
this.renderForm(elementList);
}
private void renderForm(List<FormElement> eList)
{
foreach(FormElement fe in eList)
{
//Labels left, Controls right, of course this is just a design decision
if(fe.Index%2==1)
{
Label lbl = new Label();
lbl.Text = fe.Variable;
lbl.ID = fe.ControlType + fe.Variable;
divLeft.Controls.Add(lbl);
}
else
{
dynamic ctrl = null;
switch (fe.ControlType)
{
case "TextBox":
ctrl = new TextBox();
break;
case "CheckBox":
ctrl = new CheckBox();
break;
default:
break;
}
ctrl.ID = fe.ControlType + fe.Variable;
divRight.Controls.Add(ctrl);
}
}
}
受保护的无效页面加载(对象发送方,事件参数e)
{
//访问会话时,您已将FormName或ID保存到会话
字符串formName=Session[“formName”].ToString();
//这将处理从DB获取此表单的元素
List elementList=FormElement.GetForForm(formName);
此.renderForm(元素列表);
}
专用空心渲染窗体(列表列表列表)
{
foreach(eList中的FormElement fe)
{
//标签向左,控件向右,当然这只是一个设计决策
如果(fe.索引%2==1)
{
标签lbl=新标签();
lbl.Text=fe.Variable;
lbl.ID=fe.ControlType+fe.Variable;
divLeft.Controls.Add(lbl);
}
其他的
{
动态ctrl=null;
开关(fe.控制型)
{
案例“文本框”:
ctrl=新建文本框();
打破
案例“复选框”:
ctrl=新建复选框();
打破
违约:
打破
}
ctrl.ID=fe.ControlType+fe.Variable;
控件添加(ctrl);
}
}
}
稍后,在用户点击submit之后,您将能够通过访问divRight.FindControl(fe.ControlType+fe.Variable)接收输入到这些控件中的值,因为每个表单都应该是唯一的
这种方法假设您使用的是.NET4.0(因为动态),但当然,如果没有它,您可以很好地完成这项工作,它只需要更多的代码
请让我知道这是否是您搜索的内容或是否有帮助
谢谢
丹尼斯是的,丹尼斯,很好的方法,我认为最好的方法是同时使用这两种建议。谢谢大家的投入,两个都很好,我将在我的项目中使用这两个建议