Shy*_*yju 114 c# html-helper readonly-attribute razor asp.net-mvc-3
如何使用Razor视图引擎在ASP.NET MVC3中创建只读文本框?是否有HTMLHelper方法可以做到这一点?
像这样的东西?
__CODE__
小智 238
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
Run Code Online (Sandbox Code Playgroud)
欢迎您为此创建一个HTML Helper,但这只是一个HTML属性,就像任何其他属性一样.您是否会为具有其他属性的文本框创建HTML帮助程序?
jav*_*iry 31
更新: 现在将html属性添加到默认编辑器模板非常简单.意味着而不是这样做:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
Run Code Online (Sandbox Code Playgroud)
你只需要这样做:
@Html.EditorFor(m => m.userCode, new { htmlAttributes = new { @readonly="readonly" } })
Run Code Online (Sandbox Code Playgroud)
好处:您不必.TextBoxFor
为模板打电话等.打电话吧.EditorFor
.
虽然@ Shark的解决方案正常工作且简单实用,但我的解决方案(我总是使用)就是这个创建一个editor-template
可以处理readonly
属性的解决方案:
EditorTemplates
中~/Views/Shared/
PartialView
名为的剃刀String.cshtml
填写String.cshtml
以下代码:
@if(ViewData.ModelMetadata.IsReadOnly) {
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
new { @class = "text-box single-line readonly", @readonly = "readonly", disabled = "disabled" })
} else {
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
new { @class = "text-box single-line" })
}
Run Code Online (Sandbox Code Playgroud)在模型类中,将[ReadOnly(true)]
属性放在您想要的属性上readonly
.
例如
public class Model {
// [your-annotations-here]
public string EditablePropertyExample { get; set; }
// [your-annotations-here]
[ReadOnly(true)]
public string ReadOnlyPropertyExample { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在您可以简单地使用razor的默认语法:
@Html.EditorFor(m => m.EditablePropertyExample)
@Html.EditorFor(m => m.ReadOnlyPropertyExample)
Run Code Online (Sandbox Code Playgroud)
第一个,呈现这样的正常text-box
:
<input class="text-box single-line" id="field-id" name="field-name" />
Run Code Online (Sandbox Code Playgroud)
第二,将呈现;
<input readonly="readonly" disabled="disabled" class="text-box single-line readonly" id="field-id" name="field-name" />
Run Code Online (Sandbox Code Playgroud)
您可以使用此解决方案的任何类型的数据(DateTime
,DateTimeOffset
,DataType.Text
,DataType.MultilineText
等).只需创建一个editor-template
.
使用TextBoxFor的解决方案是可以的但是如果你不想看到像EditBox那样的字段(它可能对用户来说有点困惑)涉及的变化如下:
1.更改之前的剃刀代码
<div class="editor-field">
@Html.EditorFor(model => model.Text)
@Html.ValidationMessageFor(model => model.Text)
</div>
Run Code Online (Sandbox Code Playgroud)
2.改变后
<!-- New div display-field (after div editor-label) -->
<div class="display-field">
@Html.DisplayFor(model => model.Text)
</div>
<div class="editor-field">
<!-- change to HiddenFor in existing div editor-field -->
@Html.HiddenFor(model => model.Text)
@Html.ValidationMessageFor(model => model.Text)
</div>
Run Code Online (Sandbox Code Playgroud)
通常,此解决方案禁用针对编辑的文件但显示其值.不需要代码隐藏修改.