2008-12-23 12 views
29

Mam podstawowy formularz HTML, który zostanie wstawiony do znacznika div po stronie serwera w oparciu o liczbę rekordów w bazie danych. Ta forma HTML wychodzi dobrze, a wszystko wygląda dobrze. Ale na mojej stronie akcji nie mogę uzyskać dostępu do elementów wejściowych z kodu. Próbowałem używać zakresu żądania, ale zostały one puste w tym podejście. Jakieś inne sugestie?Jak uzyskać dostęp do formularza HTML z kodu asp.net za

Wszystkie poniższe sugestie są świetne i zwykle to właśnie robię. Ale te formularze budowane są w locie po kompilacji strony, więc runat = 'server' nic dla mnie nie zrobił. Po prostu przeszedł to na stronę html.

Odpowiedz

57

Jeśli uzyskujesz dostęp do zwykłego formularza HTML, należy go przesłać na serwer za pomocą przycisku przesyłania (lub przez javascript post).Zazwyczaj oznacza to, że Twoja definicja forma będzie wyglądać następująco (idę off pamięci, pamiętaj, aby sprawdzić elementy html są poprawne):

<form method="POST" action="page.aspx"> 

<input id="customerName" name="customerName" type="Text" /> 
<input id="customerPhone" name="customerPhone" type="Text" /> 
<input value="Save" type="Submit" /> 

</form> 

powinny być w stanie uzyskać dostęp do danych CustomerName jak i customerPhone to:

string n = String.Format("{0}", Request.Form["customerName"]); 

Jeśli masz method="GET" w postaci (nie zalecane, to bałagan swoją przestrzeń URL), będziesz miał dostęp do danych formularza tak:

string n = String.Format("{0}", Request.QueryString["customerName"]); 

To oczywiście zadziała tylko wtedy, gdy formularz został "wysłany", "przesłany" lub wykonany przez "odświeżenie". (Ktoś kliknął przycisk "Zapisz", lub zostało to zrobione programowo za pomocą javascript.)

Pamiętaj też, że dostęp do tych elementów w ten sposób można wykonać tylko wtedy, gdy nie używasz kontrolek serwera (np. runat="server") , przy kontroli serwera identyfikator i nazwa są różne.

+2

To był dokładnie problem, brakowało mi atrybutu method = post. Dziękuję bardzo. –

+0

Dziękuję, szukałem tego ostatnio. – Anvar

+0

Czy można również przypisać wartości do tych elementów sterujących za pomocą polecenia Żądanie? Mam kolekcję jest błąd tylko do odczytu, gdy próbuję to zrobić. –

9

Zazwyczaj powinno się to odbywać z Request.Form["elementName"].

Na przykład, jeśli masz <input type="text" name="email" />, możesz użyć Request.Form["email"], aby uzyskać dostęp do jego wartości.

-1

Edytuj: myśl o czymś innym.

Mówisz, że tworzymy formularz dynamicznie - czy naprawdę masz na myśli <formularz> i jego zawartość, ponieważ asp.net ma problem z wieloma formularzami na stronie i już tworzy dla ciebie jedną postać logiczną.

2

Najprostszym sposobem IMO jest dołączenie identyfikatora i tagu serwera runat do wszystkich elementów.

<div id="MYDIV" runat="server" /> 

Ponieważ wygląda na to, że są to dynamicznie wstawiane elementy sterujące, można docenić funkcję FindControl().

+0

Dobry pomysł, ale wygląda na to, że wstawia zwykły kod HTML; nie dynamiczne sterowanie, więc atrybut runat nigdy nie zostanie przetworzony – rizzle

+0

To prawda, że ​​jest sedno mojego problemu, atrybut runat nigdy nie zostanie skompilowany, więc nie mam do niego dostępu. –

21

Zgaduję, że musisz ustawić te elementy wejściowe na runat = "server".

Więc nie będzie w stanie uzyskać dostęp do kontroli

<input type="text" name="email" id="myTextBox" /> 

Ale będziesz w stanie pracować z

<input type="text" name="email" id="myTextBox" runat="server" /> 

i odczytywane z niego za pomocą

string myStringFromTheInput = myTextBox.Value; 
+1

Otrzymuję '{control} nie znaleziono w bieżącym kontekście' kiedy to robię ... – Si8

0

Ponieważ używasz kodu asp.net z tyłu, dodaj identyfikator do elementu i runat = serwer.

Następnie można odwoływać się do obiektów w kodzie.

Powiązane problemy