비활성화된 텍스트 상자를 사용한 모델 바인딩
다음과 같이 정의하는 텍스트 상자가 있습니다.
<%= Html.TextBox("Username", Model.Form.Username,
new { @class = "textbox", @disabled = "disabled" })%>
작업은 다음과 같이 정의됩니다.
[AcceptVerbs(HttpVerbs.Post)]
[ValidateAntiForgeryToken]
public ActionResult EditLogin(LoginForm post) {
...
return View(model);
}
제가 여기에 글을 올리면,Username공백이 됩니다.다른 모든 속성은 올바르게 바인딩되지만 변경할 경우@disabled="disabled"로.@readonly="readonly"사용자 이름이 올바르게 바인딩되고 모든 것이 작동합니다.
모델 바인딩이 비활성화된 필드의 값을 무시하는 것 같습니다.이 일을 피할 방법이 있습니까?모델에 바인딩할 필드 값이 여전히 필요합니다.읽기 전용을 사용할 수 있지만 필드 값을 편집할 수 없다는 것이 사용자에게 시각적으로 분명하도록 비활성화된 상태를 사용하는 것을 선호합니다.
사용할 수 없는 양식 필드는 아무것도 제출하지 않습니다.양식이 있고 해당 양식에서 foo 필드를 사용 불가능으로 설정한 경우, 게시물은 foo 필드의 값을 가지지 않습니다.이것은 단순히 HTML에서 필드를 비활성화하는 것의 특성이며 MVC 문제가 아닙니다.
사용하다readonly입력은 비활성화되지만 바인딩에는 계속 남아 있습니다.디브에 스타일을 적용해서 회색으로 보이게 할 수 있나요?
<div class="editor-label">
@Html.LabelFor(model => model.FileName)
</div>
<div class="editor-field-greyed-out">
@Html.TextBoxFor(model => model.FileName, new { @readonly = true })
@Html.ValidationMessageFor(model => model.FileName)
</div>
값을 다시 보내지만 편집할 수 없도록 하려면 숨겨진 필드에 값을 배치하는 것이 좋습니다.사용자가 보안을 조작할 수 있으므로 어느 정도 보안이 필요한 경우에는 이 작업을 수행하지 마십시오.
같은 값의 숨겨진 필드를 추가하여 해결할 수 있습니다 ;)
<%= Html.Hidden("Username", Model.Form.Username)%>
설명에서 제안한 대로 비활성화 대신 읽기 전용 옵션을 선택할 수 있지만 선택 상자에서는 작동하지 않습니다.숨겨진 입력을 만드는 대신, 입력 또는 선택 항목을 비활성화된 상태로 유지하고 제출 시 JavaScript로 비활성화된 속성을 변경하여 데이터를 전달할 수 있습니다.
jQuery를 사용하면 다음과 같습니다.
$('form').on('submit', function(){
$('input, select').prop('disabled',false);
return true;
});
비활성화된 필드를 제출하는 가장 쉬운 방법은 제출하기 전에 보이지 않는 비활성화되지 않은 컨트롤에 필드를 복사하는 것입니다.일부 사람들은 이러한 컨트롤을 수동으로 만들고 jQuery에서 변경 시 이벤트에 연결하여 요청 시 복사하지만, 아래의 솔루션은 일반적이고 쉽고 덜 수다스럽습니다. 한 가지 규칙: 포스트백 후에 깨끗한 페이지를 만들어야 합니다(그래서).
$('#submitBtn').closest('form').one('submit', function() {
var $form = $(this);
// input, textarea, select, option, ----- button, datalist, keygen, output, optgroup
$form.find('input:disabled, textarea:disabled, select:disabled, option:disabled').each(function () {
var $item = $(this);
var hiddenItem = $item.clone();
hiddenItem.removeAttr('id');
hiddenItem.removeAttr('disabled');
hiddenItem.attr('style', 'display: none');
$item.after(hiddenItem);
});
});
@readonly = true가 내 페이지에서 작동하지 않습니다.저는 추가적인 조사를 했습니다.여기 그것을 설명하는 기사가 있습니다.
ReadOnly 특성이 ASP에서 작동하지 않습니다.NET MVC 모델
언급URL : https://stackoverflow.com/questions/2653432/model-binding-with-disabled-textbox
'programing' 카테고리의 다른 글
| com.google.android.gms:play-services를 찾을 수 없습니다. 3.1.59 3.2.25 4.0.30 4.1.32 4.2.40 4.2.42 4.3.23 4.4.525 5.025 5.025 5.0.89 6.1.11 6.71 6.87 (0) | 2023.08.02 |
|---|---|
| 전달된 배열의 C 크기 (0) | 2023.08.02 |
| 판다 데이터 프레임에서 이름 없는 열 제거 (0) | 2023.08.02 |
| 데이터 테이블 페이지를 사용하려면 어떻게 해야 합니까? (0) | 2023.08.02 |
| 간단한 php 함수에서 "의존성 주입"을 어떻게 사용할 수 있으며, 번거롭게 해야 합니까? (0) | 2023.08.02 |