Создать динамическое текстовое поле и получить значения - PullRequest
0 голосов
/ 06 октября 2011

Я хочу создать динамическое текстовое поле, когда пользователь нажимает кнопку Добавить ссылку. Для этого я использую этот код. И я должен отметить, что я использую главную страницу.

  protected void lnkAddMore_Click(object sender, EventArgs e)
  {
        if (Request.Cookies["value"] != null)
        {
              i = Convert.ToInt32(Request.Cookies["value"].Value) + 1 ;
        }
        for (int k = 1; k <= i; k++)
        {
              LiteralControl literal = new LiteralControl();
              literal.Text = "<br /><br />";
              Label newLabel = new Label();
              newLabel.Text = "Choice" + " " + k.ToString();
              newLabel.ID = "lblChoice_" + k.ToString();
              newLabel.Attributes.Add("runat", "Server");
              this.panelLabel.Controls.Add(newLabel);
              this.panelLabel.Controls.Add(literal);

              LiteralControl literal1 = new LiteralControl();
              literal1.Text = "<br /><br />";
              TextBox nexText = new TextBox();
              nexText.ID = "txtChoice_" + k.ToString();
              nexText.Attributes.Add("TextMode", "MultiLine");
              nexText.Attributes.Add("runat", "Server");
              panelTextbox.Controls.Add(nexText);
              this.panelTextbox.Controls.Add(literal1);

              Response.Cookies["value"].Value = i.ToString();
              Session["Panel"] = panelTextbox;
        }
  }



  protected void Page_Load(object sender, EventArgs e)
  {
        if (!IsPostBack)
        {
           if (Session["Panel"] != null)
                    {
                          ContentPlaceHolder content=new ContentPlaceHolder();
                          content.Controls.Add(Session["Panel"] as Panel);
                    }
        }
  }

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

Какой будет код, написанный для события click btnSave

  protected void btnSave_Click(object sender, EventArgs e)
  {
     if (Session["Panel"] != null)
        {
              ContentPlaceHolder content_new = new ContentPlaceHolder();
              for (int i = 1; i <= count; i++)
              {
                    strControlName = "txtChoice_" + i.ToString();

                    TextBox objTextBox =              (TextBox)content_new.FindControl(strControlName);

                    strTextBoxValues[i] = objTextBox.Text;
                    string str3 = strTextBoxValues[2];
              }
        }
  }

Этот код показывает ошибку для objTextBox. Ошибка NullReferenceException.

Как написать хранимую процедуру для сохранения данных вышеуказанного кода?

Основная проблема - обработка объявления параметров, как объявить динамический параметр для передачи значений, чтобы сохранить значение для динамического текстового поля?

Спасибо.

Ответы [ 4 ]

1 голос
/ 09 июля 2013

Я уже ответил здесь.

Потерянные динамически созданные значения текстового поля

Вы можете попробовать это.

private string GetValue(string ControlID)
{
   string[] keys = Request.Form.AllKeys;
   string value = string.Empty;
   foreach (string key in keys)
   {
     if (key.IndexOf(ControlID) >= 0)
     {
         value = Request.Form[key].ToString();
         break;
     }
   }

   return value;
}

Затем, чтобыполучить значение

string txtChoice1value = GetValue("txtChoice1");
0 голосов
/ 09 июля 2013

Вам нужно найти ссылку на уже созданный вами ContentPlaceHolder like-

ContentPlaceHolder cnt =(ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolder1");

и затем добавьте динамически созданный Control в ContentPlaceHolder as-

cnt.Controls.Add(Session["Panel"] as Panel);

Почему вы создаете новый ContentPlaceHolder каждый раз, даже если вы упомянули, что используете masterPage, поэтому должен существовать ContentPlaceHolder ..

0 голосов
/ 09 июля 2013

Элементы управления не сохраняются при обратной передаче, смотрите на http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx

0 голосов
/ 24 декабря 2012

Прежде всего, когда вы динамически создаете элемент управления, его не нужно устанавливать «runat = sever». Проблема в этой строке: ContentPlaceHolder content_new = new ContentPlaceHolder (); `вы создаете новый ContentPlaceHolder, это означает, что у него нет никакого элемента управления, который нужно найти.

Проверьте эту страницу. Как динамически создавать элемент управления TextBox во время выполнения

...