[c#] ASP.NET MVC에서 비활성화 된 입력을 제출하려면 어떻게합니까?

ASP.NET MVC에서 비활성화 된 입력을 제출하려면 어떻게합니까?



답변

readonly="readonly"대신 필드를 만들 수 없습니까 disabled="disabled"? 읽기 전용 필드 값은 사용자가 편집 할 수없는 동안 서버에 제출됩니다. 하지만 SELECT태그는 예외입니다.


답변

모두에게 감사 드려요:

이 문제를 해결 한 방법 :

document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";

노트 :

대답에 대한 정보를 얻었지만 편집되었습니다.


답변

@ppumkin 은이 답변 에 대한 그의 의견에서 이것을 언급 했지만 장애인 데이터 제출에 대한 다른 리소스를 찾을 수 없었기 때문에 강조하고 싶었습니다 <select>. 나는 또한 선택이 <input>s가 아니라 “입력”이기 때문에 질문과 관련이 있다고 생각합니다 .

비활성화 된 선택 및 모든 정렬에 대해 숨겨진 필드를 포함하십시오.

예:

@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@
@Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@

주의 : 이렇게하면 동일한 ID를 가진 두 개의 태그가 페이지에 삽입됩니다. 이는 실제로 유효한 HTML이 아니며 자바 스크립트에 골치 아픈 원인이 될 수 있습니다. 저에게는 html로 드롭 다운 값을 설정하는 javascript가 id있으며 숨겨진 필드를 먼저 넣으면 javascript 대신 select.


답변

일반적으로 “읽기 전용”이지만 서버로 다시 제출해야하는 필드가있는 경우 디스플레이를 비활성화 (또는 단순히 텍스트) 한 다음 동일한 이름의 숨겨진 필드를 추가합니다. 필드가 실제로 서버 측에서 수정되지 않았는지 확인해야합니다. 작업의 모델에서 업데이트하지 말고 오류가있는 경우에도 모델 상태는 여전히 정확합니다.


답변

양식을 제출하기 전에 다음과 같은 코드를 사용할 수도 있습니다.

$(":disabled", $('#frmMain')).removeAttr("disabled");


답변

설계 상 브라우저는이를 지원하지 않습니다.

readonly서버에 값을 제출할 수 있도록 만들 거나 readonlySelect와 같은 속성 으로 여전히 사용할 수있는 컨트롤을 다루는 경우 CSS 스타일 pointer-events: none;을 추가 하여 비대화 형으로 만듭니다.

일종의 해킹이지만 작동합니다! 자바 스크립트를 사용하지 않고 제출 버튼으로 직접 양식을 제출할 때도 작동합니다. 추가 작업이 필요하지 않습니다!

예 :

<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>


답변

아래와 같은 편집기 템플릿을 만들 수 있습니다.

CSS

.disabled {
    background-color:lightgray;
}

편집기 템플릿

@model string
@Html.TextBoxFor(x => x,new {@class="disabled", @readonly=true })