c# - Hur skickar jag inaktiverad input i ASP.NET MVC?
Hur skickar jag in inaktiverad inmatning i ASP.NET MVC?
Svar #1
Kan du inte göra fältet readonly="readonly" istället för disabled="disabled"? Ett readonly-fälts värde kommer att skickas till servern samtidigt som det inte kan redigeras av användaren. Ett SELECT-tagg är dock ett undantag.
Svar #2
Tack till alla:
Sättet jag löste detta på:
document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";
Notera:
Jag fick denna information om svaret men jag blev redigerad.
Svar #3
@ppumkin nämnde detta i sin kommentar på detta svar men jag ville lyfta fram det eftersom jag inte kunde hitta andra resurser om att skicka data från en inaktiverad <select>. Jag tror också att det är relevant för frågan eftersom select-element inte är <input>-element men de är "input"-element.
Inkludera bara ett dolt fält för det inaktiverade valet så är allt klart.
Exempel :
@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@
@Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@
Varning: detta kommer att lägga två taggar på sidan med samma ID, vilket egentligen inte är giltig HTML och kan orsaka problem med JavaScript. För mig har jag JavaScript som sätter värdet på dropdown-menyn via dess HTML-id, och om du placerar det dolda fältet först, kommer JavaScript att hitta det istället för select.
Svar #4
Vanligtvis, om jag har ett fält som är "endast läsning" men som behöver skickas tillbaka till servern, gör jag visningen inaktiverad (eller helt enkelt som text), men lägger sedan till ett dolt fält med samma namn. Du måste fortfarande se till att fältet inte faktiskt ändras på serversidan - uppdatera det bara inte från modellen i din åtgärd - men modellens tillstånd kommer fortfarande att vara korrekt om det uppstår fel.
Svar #5
Du kan också använda kod som denna innan formuläret skickas:
$(":disabled", $('#frmMain')).removeAttr("disabled");
Svar #6
Av design stöder inte webbläsare det.
Antingen gör dem readonly vilket tillåter att skicka värden till servern eller om du hanterar kontroller som fortfarande är användbara med readonly-attributet, som Select, lägg till CSS-stilen pointer-events: none; för att göra dem icke-interaktiva
Typ av lösning, men fungerar! Det fungerar också när du skickar formuläret direkt med skicka-knappen utan att använda javascript. Ingen extra arbete krävs!
T.ex :
<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>
