Jak przesłać wyłączone dane wejściowe w ASP.NET MVC?
Jak przesłać wyłączone dane wejściowe w ASP.NET MVC?
Odpowiedzi:
Nie możesz zrobić pola readonly="readonly"
zamiast disabled="disabled"
? Wartość pola tylko do odczytu zostanie przesłana na serwer, podczas gdy użytkownik nadal nie będzie mógł jej edytować. SELECT
Znacznik jest wyjątek chociaż.
<%: Html.TextBoxFor(model => model.p1, new { @readonly = "readonly" }) %>
jak mogę to wyszarzać, aby wyglądało na to, że nie można go edytować. Jeszcze lepiej, czy możemy użyć czegoś podobnego do LabelFor, próbowałem LabelFor, ale dostaje tylko DisplayName ....
type="checkbox"
danych wejściowych
Dziękuję wszystkim:
Sposób, w jaki rozwiązałem ten problem:
document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";
Uwaga:
Mam te informacje na temat odpowiedzi, ale zostały poprawione.
textBox.Attributes.Add("readonly", "readonly");
a wyjaśnienie jest w linku
$("#textBoxId").css("color", "#c0c0c0")
.
@ppumkin wspomniał o tym w swoim komentarzu do tej odpowiedzi, ale chciałem to podkreślić, ponieważ nie mogłem znaleźć innych zasobów dotyczących przesyłania danych od osoby niepełnosprawnej <select>
. Uważam również, że jest to istotne dla pytania, ponieważ wybrane elementy nie są <input>
s, ale są „ danymi wejściowymi”.
Po prostu dołącz Ukryte pole dla wyłączonego wyboru i wszystko posortowane.
Przykład:
@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@
@Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@
Uwaga: spowoduje to umieszczenie na stronie dwóch tagów o tym samym identyfikatorze, który nie jest w rzeczywistości poprawnym kodem HTML i może powodować ból głowy przy korzystaniu z JavaScript. Dla mnie mam javascript, aby ustawić wartość listy rozwijanej według jego html id
, a jeśli umieścisz ukryte pole jako pierwsze, javascript znajdzie to zamiast select
.
Zwykle, jeśli mam pole, które jest „tylko do odczytu”, ale musi zostać przesłane z powrotem na serwer, wyłączam wyświetlanie (lub po prostu tekst), a następnie dodam ukryte pole o tej samej nazwie. Nadal musisz upewnić się, że pole nie jest faktycznie modyfikowane po stronie serwera - po prostu nie aktualizuj go z modelu w akcji - ale stan modelu będzie nadal dokładny, jeśli wystąpią błędy.
Możesz również użyć takiego kodu przed przesłaniem formularza:
$(":disabled", $('#frmMain')).removeAttr("disabled");
Ajax.BeginForm
?
Z założenia przeglądarki tego nie obsługują.
Albo utwórz je, readonly
co pozwoli na przesyłanie wartości do serwera lub jeśli masz do czynienia z kontrolkami, które są nadal użyteczne z readonly
atrybutem, takim jak Wybierz, dodaj styl csspointer-events: none;
aby były nieinteraktywne
Coś w rodzaju włamania, ale działa! Działa również, gdy przesyłasz formularz bezpośrednio za pomocą przycisku przesyłania bez użycia JavaScript. Żadna dodatkowa praca nie jest wymagana!
Na przykład:
<select asp-for="TypeId"
asp-items="@(new SelectList(await TypeRepository.FetchTypesAsync(), "TypeId", "Name"))"
class="form-control form-control-sm"
readonly
style="pointer-events: none;">
</select>
gdy mamy do czynienia z wyłączonymi, ale zaznaczonymi polami wyboru i chcemy opublikować wartość, musimy upewnić się, że nasze ukryte pole pojawia się przed ukrytym polem @ Html.CheckBoxFor.
poniżej znajduje się link, z którego znalazłem odpowiedź. http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033
rozwijanie Tasos '(": disabled", $ (' # xxxForm ')). removeAttr ("disabled"); możesz użyć:
$("#xxxForm").submit(function (e) {
e.preventDefault();
var form = this;
$('#Field1')[0].disabled = false;
$('#Field2')[0].disabled = false;
...
$('#FieldN')[0].disabled = false;
form.submit(); // submit bypassing the jQuery bound event
});
Pomoże to w przesłaniu wartości modeli w ASP.net:
$("#iD").attr("style", "pointer-events: none;background-color:rgb(220,220,220)");
Zwykle używam tego sposobu dla CheckBox lub CheckBoxFor, ponieważ wyłączenie go powoduje utratę wartości. Tylko do odczytu nie działa również na polu wyboru.
@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)
Po prostu umieść ten skrypt w skryptach @section na swojej stronie. umożliwi to wprowadzanie danych podczas przesyłania strony, a po przesłaniu należy przekierować użytkownika na inną stronę.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js">
$("form").submit(function () {
if ($('form').valid()) {
$("input").removeAttr("disabled");
}
});
</script>