C# 禁用EditorFor

C# 禁用EditorFor,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,我有一个EditorFor HTML助手,如下所示: <td>@Html.EditorFor(m => m.Name, belowLevel ? disabledHtmlOptions : null)</td> 我每次都想让它残疾。我该怎么做?我不想做数据注释,因为此属性也正在其他视图中使用。仅在此视图上,我要禁用它 您可以只为视图呈现HTML。如果它是“只读”的,只需呈现文本即可。否则,可以渲染元素 例如,代替 <td>@Html.EditorFor

我有一个EditorFor HTML助手,如下所示:

<td>@Html.EditorFor(m => m.Name, belowLevel ? disabledHtmlOptions : null)</td>

我每次都想让它残疾。我该怎么做?我不想做数据注释,因为此属性也正在其他视图中使用。仅在此视图上,我要禁用它

您可以只为视图呈现HTML。如果它是“只读”的,只需呈现文本即可。否则,可以渲染
元素

例如,代替

<td>@Html.EditorFor( m => m.Name )</td>
@Html.EditorFor(m=>m.Name)

@Model.Name

@Model.Name

如果您无法继续使用
EditorFor
,您可以在页面加载时通过jQuery设置disabled属性。我知道这并不理想,但这是唯一的方法,除非你为EditorFor创建一个重载来接受htmlAttributes集合

$(document).ready(function() {
   $('#Name').attr('disabled', 'disabled');
});

我不相信
EditorFor
方法的签名允许您指定任何HTML属性。但是,如果将其更改为
TextBoxFor
,则可以

<td>@Html.TextBoxFor(m => m.Name, belowLevel ? disabledHtmlOptions : null)</td>
@Html.TextBoxFor(m=>m.Name,belowLevel?disabledHtmlOptions:null)

MVC 5.1现在允许在EditorFor中传递HTML属性。所以你可以这样做:

@Html.EditorFor(model => m.Name, new { htmlAttributes = new { disabled = "disabled" } })

拉杰,你有可能得不到一个很好的答案,因为你对问题的描述有点模糊。是否有任何方法可以扩展问题和所需的解决方案,如果需要的话,可以将示例稍微扩展一点,再加上背景潜台词possible@Jim,我不知道如何才能更准确地描述它,但是,我只需要禁用显示名称的文本框或编辑器。我可以在标签中显示,但这不是要求。raj-我认为您的编辑只是有帮助:)顺便说一句,小心点,因为即使输入被禁用,您的用户仍然可以向您发送一个新值。当我尝试此@m.Name?try@Model.Name时,当前上下文中不存在m(请告诉我@Jisaak)。更新答案。我更新了我的问题。我有一个正在禁用的对象。但它仍然不起作用。@Raj,如果你需要禁用它,我的第一个选项不起作用吗?将其呈现为文本(@Model.Name)将使其不可编辑。如果需要禁用的输入框,只需将disabled=“disabled”放入输入元素本身。如果您需要有条件地添加disabled属性,您也可以这样做。@contactmatt:那么您的意思是:@Html.EditorFor(m=>m.Name,disabled=“disabled”)
$(document).ready(function() {
   $('#Name').attr('disabled', 'disabled');
});
<td>@Html.TextBoxFor(m => m.Name, belowLevel ? disabledHtmlOptions : null)</td>
@Html.EditorFor(model => m.Name, new { htmlAttributes = new { disabled = "disabled" } })