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(因为动态),但当然,如果没有它,您可以很好地完成这项工作,它只需要更多的代码

    请让我知道这是否是您搜索的内容或是否有帮助

    谢谢


    丹尼斯

    是的,丹尼斯,很好的方法,我认为最好的方法是同时使用这两种建议。谢谢大家的投入,两个都很好,我将在我的项目中使用这两个建议