2015-12-09 5 views
1

Я динамически генерирую переключатели для списка вопросов, каждый вопрос имеет как минимум 3 варианта ответа. я сгенерировал радио-кнопки в DIV называется questionsList, но я не могу их или их Fieldset доступ ... Вот мой кодДоступ к динамически созданным элементам html из кода C# позади

 _questions = Page.Form.FindControl("questionsList"); 

      foreach (Question q in _survey.Questions) 
      { 
       if (!string.IsNullOrEmpty(q.QuestionEng)) 
       { 
        List<Answers> answers = _blSurvey.GetAnswers(q.TypeOfQuestion); 
        string choiceItem = string.Empty; 
        foreach (Answers a in answers) 
        { 
         choiceItem += "<input type='radio' value='" + a.AnswerId + q.QuestionId + 
             "' name='radio-choice-v-2' id='radio" + idCount + 
             "' runat='server' /><label for='radio" + idCount++ + 
             "' >" + a.AnswerEng + "</label>"; 
        } 
        var question = 
         new LiteralControl(
          "<form><fieldset runat='server' class='questions' data-role='controlgroup' ID ='question" + 
          q.QuestionId + "'>" + 
          "<legend runat='server'>" + ++index + ". " + q.QuestionEng + "</legend>" + choiceItem + 
          "</fieldset></form>"); 

        _questions.Controls.Add(question); 
       } 
      } 

Я пытался использовать FindControl() со строкой вопроса и идентификатор на вопрос, так как она это IS, указанный мной для набора полей (ID ='question" + q.QuestionId), но он не работал, Я также пытался получить доступ к любому из динамически сгенерированных элементов управления, но всегда получаю null. Если мой способ создания элементов управления некорректен, пожалуйста, скажите мне, что является лучшим методом для этого. Я очень новичок в asp.net. Заранее спасибо.

+0

Plain HTML элементы являются * не * Управление. Они полностью живут на стороне клиента. Однако, если они являются элементами формы (какие переключатели есть), и они находятся в теге '

', тогда, когда вы отправляете страницу, они будут включены в значения, которые отправляются на сервер, к которым вы можете получить доступ через свойство [Request.Form] (https://msdn.microsoft.com/en-us/library/system.web.httprequest.form%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396) на веб-странице (альтернативно в 'System.Web.HttpContext.Current.Request.Form'). – mason

ответ

0

Я использовал ретранслятор и привязал его к списку вопросов и вариантам вместо того, чтобы генерировать вопросы динамически.

Как это

     <div runat="server" id="questionsList" > 
          <asp:Repeater ID="rptQuestionsEng" runat="server" Visible="False"> 

           <ItemTemplate> 
            <asp:Label runat="server" ID="lblQuestion" Text='<%# Bind("QuestionEng") %>'></asp:Label> 
            <asp:RadioButtonList runat="server" ID="rblQuestionEng" 
            </asp:RadioButtonList> 
           </ItemTemplate> 
          </asp:Repeater> 
         </div> 

кодекса позади:

  //To bound the questions 
      rptQuestionsEng.DataSource = _survey.Questions; 
      rptQuestionsEng.DataBind(); 

      //To bound the choices 
      protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e) 
      { 
       if (e.Item.ItemType == ListItemType.Item || 
       e.Item.ItemType == ListItemType.AlternatingItem) 
       { 
       if (rblLanguage.SelectedValue.Equals("1")) 
       { 
        foreach (Question q in _survey.Questions) 
        { 
         q.answers = _blSurvey.GetAnswers(q.TypeOfQuestion); 
         var rbl = (RadioButtonList)e.Item.FindControl("rblQuestionEng"); 
         if (!string.IsNullOrEmpty(q.QuestionEng)) 
         { 
         rbl.DataTextField = "AnswerEng"; 
         rbl.DataValueField = "AnswerId"; 
         rbl.DataSource = q.answers; 
         rbl.DataBind(); 
         } 
        } 
        } 
       } 
       } 
Смежные вопросы