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


108

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


3
일반적으로 질문을 질문으로 표현한 다음 답변을 별도로 게시해야합니다. 종결 투표; '답변'부분을 실제 답으로 옮기는 것이 좋습니다.
George Stocker

1
귀하의 질문에 비활성화 된 단어로 인해 @Dhaval 게시물이 정확히 대답한다고 생각합니다.
QMaster

답변:


160

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


1
읽기 전용은 작동하지만 필드를 회색으로 표시하지 않습니다. 다음은 내가 사용하는 예입니다. <%: Html.TextBoxFor(model => model.p1, new { @readonly = "readonly" }) %>시각적으로 편집 할 수없는 것처럼 보이도록 회색으로 표시하려면 어떻게해야합니까? 더 나은 아직 우리는 동시에, labelFor 비슷한 사용할 수 있습니다, 나는 동시에, labelFor을 시도했지만 그것은 단지 .... DisplayName이를 얻을 수
VoodooChild

22
4 년 동안 .net asp를했는데 비활성화 된 입력이 다시 게시되지 않는다는 사실을 전혀 몰랐습니다. 비활성화 된 선택에 대해 Hidden 필드를 포함하고 모두 정렬합니다. (허용되지 않는 양식에서 ID가 반복 되더라도)
Piotr Kula

5
이것은 type="checkbox"입력에 대해서도 작동하지 않습니다
Nathan

1
라디오 버튼으로 동일한 작업을 시도하고 있지만 읽기 전용이 작동하지 않는 것 같습니다.
Randy R

38

모두에게 감사 드려요:

이 문제를 해결 한 방법 :

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

노트 :

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


1
이것은 나를 위해 잘 작동하지 않았습니다 ( 이 SO 링크 덕분에 알아 냈습니다 ). 이것은 효과가 있습니다 : textBox.Attributes.Add("readonly", "readonly");그리고 설명은 링크에 있습니다
brian-d

이것이 저에게 더 의미가 있기 때문에 편집 한 것이 좋습니다.
Yawar

읽기 전용은 갈 길인 것 같습니다. 컨트롤을 다시 포즈를 취하지 않는 것과 같은 이상한 일을하지 않지만 편집 할 수는 없습니다. Muchas Gracias!
Mariusz

Michael Brennt의 의견에 추가하려면 jQuery를 사용하는 경우 두 번째 줄은 $("#textBoxId").css("color", "#c0c0c0").
F1Krazy

30

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


20

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


네, 당신이 마시고있는 것을 할 생각이었습니다. 하지만 더 많은 변수를 처리해야했습니다. 내 게시물이 Google에 표시되고 사람들이 고통을 겪지 않고 쉬운 해결책을 찾을 수 있기를 바랍니다.
Sanchitos

4
솔루션의 한 가지 문제는 javascript가 비활성화되면 중단된다는 것입니다. 숨겨진 필드를 서버 측에 주입하는 것은이 문제가 없습니다.
tvanfosson

15

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

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

2
나는 이것을 사용했다, 숨겨진 요소에 대해 걱정할 필요가 없다, js 기능 때문에 포스트 백에 약간의 지연을 제외하고는 어떤 단점이 있는지 확실하지 않다
IronHide

2
읽기 전용 사용에 대해 언급 한 많은 답변에 대해 많은 경우에 비활성화를 사용해야한다고 생각합니다. 비슷한 질문에서 약 15 개의 답변을 읽었으며 비활성화 된 속성을 제거하기 위해 적절한 요소를 선택하기 위해 자체 jQuery 필터로 이것을 선택했습니다. 감사.
QMaster 2016 년

로 제출하는 경우 Ajax.BeginForm어떻게합니까?
markzzz


1
... 조금 이상한 보이지만, 그것은 나를 위해 일한 유일한 솔루션이었다
AGuyCalledGerald

8

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

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>

6

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

CSS

.disabled {
    background-color:lightgray;
}

편집기 템플릿

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


1

확장 Tasos '( ": disabled", $ ('# xxxForm ')). removeAttr ( "disabled"); 당신이 사용할 수있는:

$("#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
});

1

이렇게하면 ASP.net에서 모델 값을 제출하는 데 도움이됩니다.

$("#iD").attr("style", "pointer-events: none;background-color:rgb(220,220,220)");

1
제발 답변을 포맷 . 이 모두를 위해 더 쉽게 읽을
Tarick 솟아에게

0

사용하지 않도록 설정하면 값이 손실되기 때문에 일반적으로 CheckBox 또는 CheckBoxFor에 대해이 방법을 사용합니다. 읽기 전용은 확인란에서도 작동하지 않습니다.

@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)

0

이 스크립트를 페이지의 @section 스크립트에 넣으십시오. 이렇게하면 페이지를 제출할 때 입력이 가능하며 제출 후 사용자를 다른 페이지로 리디렉션해야합니다.

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


-3

해당 뷰에 연결된 ViewModel에서 해당 속성을 [필수]로 만드십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.