MVC3 편집기 읽기 전용
편집 페이지에서 EditorFor로 readOnly를 만들고 싶습니다.
읽기 전용을 시도하고 다음과 같이 비활성화했습니다.
<div class="editor-field">
@Html.EditorFor(model => model.userName, new { disabled = "disabled", @readonly = "readonly" })
</div>
그러나 작동하지 않습니다. 이 필드 편집을 비활성화하려면 어떻게해야합니까?
감사합니다.
EditorFor html 도우미에는 HTML 속성을 사용하는 오버로드가 없습니다. 이 경우 TextBoxFor와 같은 좀 더 구체적인 것을 사용해야합니다.
<div class="editor-field">
@Html.TextBoxFor(model => model.userName, new
{ disabled = "disabled", @readonly = "readonly" })
</div>
EditorFor를 계속 사용할 수 있지만 사용자 정의 EditorTemplate에 TextBoxFor가 있어야합니다.
public class MyModel
{
[UIHint("userName")]
public string userName { ;get; set; }
}
그런 다음 Views / Shared / EditorTemplates 폴더에서 userName.cshtml 파일을 만듭니다. 그 파일에 다음을 넣으십시오.
@model string
@Html.TextBoxFor(m => m, new { disabled = "disabled", @readonly = "readonly" })
이 코드는 MVC4 이상에서 지원됩니다.
@Html.EditorFor(model => model.userName, new { htmlAttributes = new { @class = "form-control", disabled = "disabled", @readonly = "readonly" } })
왜 EditoFor를 사용하고 싶은지 궁금하신 분들을 위해 예를 들어 보겠습니다.
내 모델에 있습니다.
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0: dd/MM/yyyy}")]
public DateTime issueDate { get; set; }
이 형식을 표시하려면 EditorFor를 사용하는 것이 유일한 방법이지만 해당 "입력"에 대한 jquery datepicker가 있으므로 사용자가 잘못된 날짜를 작성하지 않도록 읽기 전용이어야합니다.
내가 원하는 방식으로 작동하도록 뷰에 넣습니다.
@Html.EditorFor(m => m.issueDate, new{ @class="inp", @style="width:200px", @MaxLength = "200"})
그리고 이것은 내 준비 기능에서 ...
$('#issueDate').prop('readOnly', true);
나는 이것이 누군가에게 도움이되기를 바랍니다. 내 영어 죄송합니다
다음과 같이 할 수 있습니다.
@Html.EditorFor(m => m.userName, new { htmlAttributes = new { disabled = true } })
방법은 다음과 같습니다.
모델:
[ReadOnly(true)]
public string Email { get { return DbUser.Email; } }
전망:
@Html.TheEditorFor(x => x.Email)
신장:
namespace System.Web.Mvc
{
public static class CustomExtensions
{
public static MvcHtmlString TheEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes = null)
{
return iEREditorForInternal(htmlHelper, expression, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
}
private static MvcHtmlString iEREditorForInternal<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes)
{
if (htmlAttributes == null) htmlAttributes = new Dictionary<string, object>();
TagBuilder builder = new TagBuilder("div");
builder.MergeAttributes(htmlAttributes);
var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
string labelHtml = labelHtml = Html.LabelExtensions.LabelFor(htmlHelper, expression).ToHtmlString();
if (metadata.IsRequired)
labelHtml = Html.LabelExtensions.LabelFor(htmlHelper, expression, new { @class = "required" }).ToHtmlString();
string editorHtml = Html.EditorExtensions.EditorFor(htmlHelper, expression).ToHtmlString();
if (metadata.IsReadOnly)
editorHtml = Html.DisplayExtensions.DisplayFor(htmlHelper, expression).ToHtmlString();
string validationHtml = Html.ValidationExtensions.ValidationMessageFor(htmlHelper, expression).ToHtmlString();
builder.InnerHtml = labelHtml + editorHtml + validationHtml;
return new MvcHtmlString(builder.ToString(TagRenderMode.Normal));
}
}
}
물론 내 에디터는 라벨 추가, 필요에 따라 해당 라벨에 필수 클래스 추가 DisplayFor
, 속성이 ReadOnly
EditorFor
없는 경우 추가, a 추가 ValidateMessageFor
및 마지막으로 할당 Div
할 수있는 모든 것을 래핑하는 등의 작업을 더 많이 수행합니다. Html Attributes
그것에 ... 내 정말 Views
깨끗합니다.
나는 질문에 MVC 3이라는 것을 알고 있지만 2012 년이므로 다음과 같은 경우를 대비하십시오.
As of MVC 5.1 you can now pass HTML attributes to EditorFor
like so:
@Html.EditorFor(x => x.Name, new { htmlAttributes = new { @readonly = "", disabled = "" } })
Try using:
@Html.DisplayFor(model => model.userName) <br/>
@Html.HiddenFor(model => model.userName)
Create an EditorTemplate for a specific set of Views (bound by one Controller):
In this example I have a template for a Date, but you can change it to whatever you want.
Here is the code in the Data.cshtml:
@model Nullable<DateTime>
@Html.TextBox("", @Model != null ? String.Format("{0:d}", ((System.DateTime)Model).ToShortDateString()) : "", new { @class = "datefield", type = "date", disabled = "disabled" @readonly = "readonly" })
and in the model:
[DataType(DataType.Date)]
public DateTime? BlahDate { get; set; }
Old post I know.. but now you can do this to keep alignment and all looking consistent..
@Html.EditorFor(model => model.myField, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly" } })
I use the readonly
attribute instead of disabled
attribute - as this will still submit the value when the field is readonly.
Note: Any presence of the readonly attribute will make the field readonly
even if set to false, so hence why I branch the editor for code like below.
@if (disabled)
{
@Html.EditorFor(model => contact.EmailAddress, new { htmlAttributes = new { @class = "form-control", @readonly = "" } })
}
else
{
@Html.EditorFor(model => contact.EmailAddress, new { htmlAttributes = new { @class = "form-control" } })
}
i think this is simple than other by using [Editable(false)] attribute
for example:
public class MyModel
{
[Editable(false)]
public string userName { get; set; }
}
<div class="editor-field">
@Html.EditorFor(model => model.userName)
</div>
Use jquery to disable
<script type="text/javascript">
$(document).ready(function () {
$('#userName').attr('disabled', true);
});
</script>
참고URL : https://stackoverflow.com/questions/10109185/mvc3-editorfor-readonly
'Program Tip' 카테고리의 다른 글
Gunicorn에서 실행되는 Flask 앱 디버깅 (0) | 2020.11.23 |
---|---|
지수 백오 프로 셀러리 작업 재시도 (0) | 2020.11.23 |
Hashmap은 int, char에서 작동하지 않습니다. (0) | 2020.11.23 |
피보나치 힙 데이터 구조의 직관은 무엇입니까? (0) | 2020.11.23 |
Bash에서 dirname의 마지막 부분을 얻는 방법 (0) | 2020.11.23 |