我想在编辑页面中使用EditorFor进行readOnly。
我尝试将readonly和disabled设为:
<div class="editor-field">
@Html.EditorFor(model => model.userName, new { disabled = "disabled", @readonly = "readonly" })
</div>
然而,它不起作用。如何禁用编辑此字段?
谢谢。
答案 0 :(得分:85)
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" })
答案 1 :(得分:25)
MVC4以后版本支持此代码
@Html.EditorFor(model => model.userName, new { htmlAttributes = new { @class = "form-control", disabled = "disabled", @readonly = "readonly" } })
答案 2 :(得分:12)
对于那些想知道为什么要使用EditoFor的人,如果你不想让它可以编辑,我就有一个例子。
我的模型中有这个。
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0: dd/MM/yyyy}")]
public DateTime issueDate { get; set; }
当你想要显示那种格式时,它唯一的工作方式是使用EditorFor,但是我有一个jquery datepicker用于那个“输入”所以它必须是只读的,以避免用户写错错误的日期。 / p>
为了让它按照我想要的方式工作,我把它放在View ...
中 @Html.EditorFor(m => m.issueDate, new{ @class="inp", @style="width:200px", @MaxLength = "200"})
这是我准备好的功能......
$('#issueDate').prop('readOnly', true);
我希望这对那里的人有所帮助。 对不起我的英文
答案 3 :(得分:6)
你可以这样做:
@Html.EditorFor(m => m.userName, new { htmlAttributes = new { disabled = true } })
答案 4 :(得分:3)
我是这样做的:
<强>型号:强>
[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
如果不是,请添加ValidateMessageFor
并最终将Div
中的所有内容包含在可以Html Attributes
分配给Views
的内容中......我的{{1}}非常干净。
答案 5 :(得分:3)
我知道问题陈述MVC 3,但它是2012年,所以以防万一:
从MVC 5.1开始,您现在可以将HTML属性传递给EditorFor
,如下所示:
@Html.EditorFor(x => x.Name, new { htmlAttributes = new { @readonly = "", disabled = "" } })
答案 6 :(得分:3)
尝试使用:
@Html.DisplayFor(model => model.userName) <br/>
@Html.HiddenFor(model => model.userName)
答案 7 :(得分:1)
为特定的一组视图创建一个EditorTemplate(由一个Controller绑定):
在此示例中,我有一个日期模板,但您可以将其更改为您想要的任何内容。
以下是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" })
并在模型中:
[DataType(DataType.Date)]
public DateTime? BlahDate { get; set; }
答案 8 :(得分:1)
旧帖子我知道..但是现在你可以这样做以保持对齐并且看起来一致......
@Html.EditorFor(model => model.myField, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly" } })
答案 9 :(得分:0)
我使用readonly
属性而不是disabled
属性-因为当字段为只读时,它仍将提交值。
注意:任何只读属性的存在都会使字段readonly
即使设置为false,因此为什么要为如下所示的代码分支编辑器。
@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" } })
}
答案 10 :(得分:-1)
我认为这比使用[Editable(false)]属性
更简单例如:
public class MyModel
{
[Editable(false)]
public string userName { get; set; }
}
答案 11 :(得分:-1)
<div class="editor-field">
@Html.EditorFor(model => model.userName)
</div>
使用jquery禁用
<script type="text/javascript">
$(document).ready(function () {
$('#userName').attr('disabled', true);
});
</script>