cześć Stworzyłem nie. pól tekstowych (które nie zostały wprowadzone przez użytkownika w polu tekstowym txtcount) dynamicznie. Ale chcę przechowywać te wartości w bazie danych. W tym celu użyłem kodu w zdarzeniu kliknięcia przycisku Zapisz w następujący sposób:
protected void btnsave_Click(object sender, EventArgs e)
{
// Check how many textboxes the user created
int count = Convert.ToInt32(txtcount.Text);
// Loop through them
for (int i=0; i < count; i++)
{
// Get the TextBox
TextBox textbox = (TextBox)Page.FindControl("TextBox_" + i);
// Get the value
string val = textbox.Text;
Response.Write(val);
}
}
Ale daje błąd:
Object reference not set to an instance of an object.
Co powinienem zrobić? Proszę pomóż mi? Dziękuję Ci.
Odpowiedzi:
1 dla odpowiedzi № 1Powinieneś ponownie utworzyć swoje pola tekstowe przy każdym postback w tej samej kolejności. Najlepszym miejscem jest page_init. Być może masz powody, aby to zrobić na page_load. Możesz więc uzyskać jego wartości ze stanu widoku.
1 dla odpowiedzi nr 2
Jeśli chcesz je odnieść, musisz ponownie utworzyć formanty dynamiczne na (każdym) przesyłaniu zwrotnym. Posługiwać się Page_Init
lub Page_Load
zdarzenie.
Jeszcze inną alternatywą (jeśli nie może się powtarzać po zwrotach) może być bezpośrednie odczytanie wartości z żądania. Na przykład,
string val = Request.Form["TextBox_" + i]
Oczywiście nazwa zmiennej żądania może ulec zmianie, jeśli użyjesz kontrolek szablonowych (lub kontrolek master) w hierarchii nadrzędnej. Jednym z rozwiązań w takim przypadku może być zapisanie nazwy kontrolnej próbki (UniqueID
) do przechowywania w stanie widoku.