Mam pewne wyłączone dane wejściowe w formularzu i chcę je wysłać na serwer, ale Chrome wyklucza je z żądania.
Czy istnieje jakieś obejście tego problemu bez dodawania ukrytego pola?
<form action="/Media/Add">
<input type="hidden" name="Id" value="123" />
<!-- this does not appear in request -->
<input type="textbox" name="Percentage" value="100" disabled="disabled" />
</form>
Odpowiedzi:
Elementy z
disabled
atrybutem nie są przesyłane lub można powiedzieć, że ich wartości nie są publikowane (zobacz drugi punkt pod krokiem 3 w specyfikacji HTML 5 na temat tworzenia zestawu danych formularza ).To znaczy,
Do Twojej wiadomości, zgodnie z 17.12.1 w specyfikacji HTML 4:
Możesz użyć
readonly
atrybutu w swoim przypadku, robiąc to, będziesz mógł opublikować dane swojego pola.To znaczy,
Do Twojej wiadomości, według 17.12.2 w specyfikacji HTML 4:
źródło
Używając Jquery i wysyłając dane za pomocą ajax, możesz rozwiązać swój problem:
źródło
cursor:not-allowed;
Aby księgować wartości z wyłączonych danych wejściowych oprócz włączonych danych wejściowych, możesz po prostu ponownie włączyć wszystkie dane wejściowe formularza podczas jego przesyłania.
Jeśli wolisz jQuery:
W przypadku ASP.NET MVC C # Razor dodajesz procedurę obsługi przesyłania w następujący sposób:
źródło
Jeśli absolutnie musisz wyłączyć pole i przekazać dane, możesz użyć javascript, aby wprowadzić te same dane do ukrytego pola (lub po prostu ustawić również pole ukryte). Umożliwi to wyłączenie tej funkcji, ale nadal publikowanie danych, nawet jeśli będziesz publikować na innej stronie.
źródło
Aktualizuję tę odpowiedź, ponieważ jest bardzo przydatna. Po prostu dodaj tylko do odczytu.
Tak więc formularz będzie:
źródło
Semantycznie wydaje się to prawidłowym zachowaniem
Zadawałbym sobie pytanie „ Dlaczego muszę podać tę wartość? ”
Jeśli masz wyłączone dane wejściowe w formularzu, prawdopodobnie nie chcesz, aby użytkownik zmieniał wartość bezpośrednio
Każda wartość wyświetlana w wyłączonym wejściu powinna być
Zakładając, że serwer przetwarzający formularz jest taki sam, jak serwer go obsługujący, wszystkie informacje do odtworzenia wartości wyłączonych danych wejściowych powinny być dostępne podczas przetwarzania
W rzeczywistości, aby zachować integralność danych - nawet jeśli wartość wyłączonego wejścia została wysłana do serwera przetwarzania, naprawdę powinieneś ją sprawdzić. Ta walidacja wymagałaby tego samego poziomu informacji, co i tak musiałbyś odtworzyć wartości!
Niemal argumentowałbym, że dane wejściowe tylko do odczytu nie powinny być wysyłane w żądaniu
Cieszę się, że mogę to poprawić, ale wszystkie przypadki użycia, które mogę wymyślić, gdzie należy przesyłać dane tylko do odczytu / wyłączone, to tak naprawdę tylko ukryte problemy ze stylem
źródło
Uważam, że to działa łatwiej. czytaj tylko pole wejściowe, a następnie nadaj mu styl, aby użytkownik końcowy wiedział, że jest tylko do odczytu. umieszczone tutaj dane wejściowe (na przykład z AJAX) można nadal przesyłać bez dodatkowego kodu.
źródło
Możesz całkowicie uniknąć wyłączenia, jest to bolesne, ponieważ format formularza HTML nie wysyła nic związanego
<p>
ani żadnej innej etykiety.Możesz zamiast tego ustawić regularnie
Dodaj
readonly="readonly"
Nie wyłączyłby tekstu, ale nie zmieniłby się przez użytkownika, więc działa jak
<p>
i wyśle wartość poprzez formularz. Po prostu usuń ramkę, jeśli chcesz uczynić ją bardziej podobną do<p>
taguźródło