ASP.NET - Guardar controles dinámicos de un generador de encuestas en sql server

 
Vista:
sin imagen de perfil

Guardar controles dinámicos de un generador de encuestas en sql server

Publicado por abner coronado (2 intervenciones) el 22/01/2016 01:14:13
Diseñe un "generador de encuestas" con controles dinámicos para que se agregue un textbox para la pregunta, un dropdownlist para el tipo de pregunta y un botón para agregar dinamicamente input's para las repuestas, mi problema es que no he encontrado un ejemplo o una idea para guardar todos los valores. Les agradezco su atención.

Este es mi código en el evento page_load
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!IsPostBack) //cuando es la primera carga genera la primera pregunta
            {
                txtpreg = new TextBox[0];
                ddl = new DropDownList[0];
                pnl = new Panel[0];
                hpy = new HyperLink[0];
                LiteralControl lt = new LiteralControl("<div class=\"form-group\"><label class=\"control-label col-md-4\">Pregunta:</label><div class=\"col-md-8\">");
                placeh.Controls.Add(lt);
                TextBox txt = new TextBox();
                txt.ID = "txtpreg" + "0";
                txt.Attributes.Add("class", clase);
                placeh.Controls.Add(txt);
                // txtpreg[i] = txt;
                LiteralControl ltr = new LiteralControl("</div></div>");
                placeh.Controls.Add(ltr);
                LiteralControl ltrc = new LiteralControl("<div class=\"form-group\"><label class=\"control-label col-md-4\">Tipo de Respuesta:</label><div class=\"col-md-8\">");
                placeh.Controls.Add(ltrc);
                DropDownList ddlist = new DropDownList();
                ddlist.ID = "ddl" + "0";
                ddlist.Attributes.Add("class", clase);
                ddlist.Items.Add(new ListItem("-- seleccione --", "0"));
                ddlist.Items.Add(new ListItem("Opción Multiple", "1"));
                ddlist.Items.Add(new ListItem("Una Opción", "2"));
                ddlist.Items.Add(new ListItem("Respuesta Abierta", "3"));
                placeh.Controls.Add(ddlist);
                LiteralControl ltc = new LiteralControl("</div></div>");
                placeh.Controls.Add(ltc);
                LiteralControl ltcr = new LiteralControl("<div class=\"form-group\"><label class=\"control-label col-md-4\">Agregar Respuesta:</label><div class=\"col-md-8\">");
                placeh.Controls.Add(ltcr);
                Panel div = new Panel();
                div.ID = "pnl" + "0";
                HyperLink hp = new HyperLink();
                hp.ID = "a-" + "0";
                hp.Attributes.Add("class", "btn blue btn-outline nvo");
                hp.ClientIDMode = System.Web.UI.ClientIDMode.Static;
                hp.NavigateUrl = "javascript:void(0);";
                hp.Text = "+";
                div.Controls.Add(hp);
                placeh.Controls.Add(div);
                LiteralControl lcb = new LiteralControl("</div></div>");
                placeh.Controls.Add(lcb);
                conteo = conteo + 1;
            }
            else
            {
                //no hacer nada
            }
        }
        catch (Exception)
        {
            throw;
        }
    }


Con este botón genero una nueva pregunta
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
protected void btnadd_Click(object sender, EventArgs e) //agrega nuevas preguntas
    {
        conteo = conteo + 1;
        txtpreg = new TextBox[conteo];
        ddl = new DropDownList[conteo];
        pnl = new Panel[conteo];
        hpy = new HyperLink[conteo];
        int i;
        for (i = 0; i < conteo; i += 1) //lee el valor de conteo para asi determinar el id consecutivo en la pregunta
        {
            LiteralControl lt = new LiteralControl("<div class=\"form-group\"><label class=\"control-label col-md-4\">Pregunta:</label><div class=\"col-md-8\">");
            placeh.Controls.Add(lt);
            TextBox txt = new TextBox();
            txt.ID = "txtpreg" + i.ToString();
            txt.Attributes.Add("class", clase);
            placeh.Controls.Add(txt);
            txtpreg[i] = txt;
            LiteralControl ltr = new LiteralControl("</div></div>");
            placeh.Controls.Add(ltr);
            LiteralControl ltrc = new LiteralControl("<div class=\"form-group\"><label class=\"control-label col-md-4\">Tipo de Respuesta:</label><div class=\"col-md-8\">");
            placeh.Controls.Add(ltrc);
            DropDownList ddlist = new DropDownList();
            ddlist.ID = "ddl" + i.ToString();
            ddlist.Attributes.Add("class", clase);
            ddlist.Items.Add(new ListItem("-- seleccione --", "0"));
            ddlist.Items.Add(new ListItem("Opción Multiple", "1"));
            ddlist.Items.Add(new ListItem("Una Opción", "2"));
            ddlist.Items.Add(new ListItem("Respuesta Abierta", "3"));
            placeh.Controls.Add(ddlist);
            ddl[i] = ddlist;
            LiteralControl ltc = new LiteralControl("</div></div>");
            placeh.Controls.Add(ltc);
            LiteralControl ltcr = new LiteralControl("<div class=\"form-group\"><label class=\"control-label col-md-4\">Agregar Respuesta:</label><div class=\"col-md-8\">");
            placeh.Controls.Add(ltcr);
            Panel div = new Panel();
            div.ID = "pnl" + i.ToString();
            HyperLink hp = new HyperLink();
            hp.ID = "a-" + i.ToString();
            hp.Attributes.Add("class", "btn blue btn-outline nvo");
            hp.ClientIDMode = System.Web.UI.ClientIDMode.Static;
            hp.NavigateUrl = "javascript:void(0);";
            hp.Text = "+";
            div.Controls.Add(hp);
            placeh.Controls.Add(div);
            pnl[i] = div;
            hpy[i] = hp;
            LiteralControl lcb = new LiteralControl("</div></div>");
            placeh.Controls.Add(lcb);
        }
    }


y por el lado del cliente esta es una parte de la página
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
asp:UpdatePanel ID="up1" runat="server" UpdateMode="Conditional">
                                            <ContentTemplate>
                                                <div class="form-wizard">
                                                    <div runat="server" id="placeh" class="form-body">
                                                        <%--Aqui se agregara el div FORM-BODY con los elementos dinamicos--%>
                                                    </div>
                                                </div>
                                            </ContentTemplate>
                                            <Triggers>
                                                <asp:AsyncPostBackTrigger ControlID="btnadd" EventName="Click" />
                                                <asp:AsyncPostBackTrigger ControlID="btndel" EventName="Click" />
                                            </Triggers>
                                        </asp:UpdatePanel>
 
$(document).ready(function () {
            $(".nvo").click(function () {
                var ids = $(this).attr('id');
                var valor = ids.substring(2);
                var parent = $(this).parent().attr('id');
                var idpadre = parent.substring(3);
                if ($('#' + parent).children().find('input').length != 0) {
                    //traer el ultimo id del txt agregado y sumarle 1
                    var txt = $('#' + parent).children().find('input').last().attr('id');
                    var idnum = txt.lastIndexOf('-');
                    var result = txt.substring(idnum + 1);
                    result++;
                    var divs = $('<div class="form-group"><label class="control-label col-md-4">Respuesta ' + result + ':</label><div class="col-md-8"><input id="txt' + idpadre + '-' + result + '" class="form-control" type="text"></input></div></div>');
                    $('#pnl' + idpadre).append(divs);
                }
                else {
                    var divs = $('<div class="form-group"><label class="control-label col-md-4">Respuesta ' + 1 + ':</label><div class="col-md-8"><input id="txt' + idpadre + '-1' + '" class="form-control" type="text"></input></div></div>'); //si no trae existe un txt dentro del panel parent se genera un nuevo elemento
                    $('#pnl' + idpadre).append(divs);
                }
            });
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder