当前位置:  开发笔记 > 后端 > 正文

ASP.NET MVC Preview 5的Html.TextBox条件属性

如何解决《ASP.NETMVCPreview5的Html.TextBox条件属性》经验,为你挑选了2个好方法。

我有一个强类型的MVC视图控件,它负责用户可以创建和编辑客户端项目的UI.我希望他们能够定义ClientId创建,但不能编辑,这将在UI中反映出来.

为此,我有以下几行:

<%= Html.TextBox("Client.ClientId", ViewData.Model.ClientId, new 
 { @readonly = 
   (ViewData.Model.ClientId != null && ViewData.Model.ClientId.Length > 0 
      ? "readonly" : "false") 
 } )
%>

似乎无论我给readonly属性(甚至"false"和"")赋予什么值,Firefox和IE7都使输入成为只读,这是令人讨厌的反直觉.如果不需要,是否有一个很好的,基于三元运算符的方法来完全删除属性?



1> Panos..:

难题......但是,如果只想定义readonly属性,可以这样做:

<%= Html.TextBox("Client.ClientId", ViewData.Model.ClientId, 
  ViewData.Model.ClientId != null && ViewData.Model.ClientId.Length > 0 
    ? new { @readonly =  "readonly" } 
    : null) 
%>

如果要定义更多属性,则必须定义两个匿名类型并具有多个属性副本.例如,像这样的东西(我不喜欢这样):

ClientId.Length > 0 
  ? (object)new { @readonly = "readonly", @class = "myCSS" } 
  : (object)new { @class = "myCSS" }



2> Aviko..:

如果要定义多个属性,并且条件只读而不重复其他属性,则可以对属性使用Dictionary而不是匿名类型.

例如

Dictionary htmlAttributes = new Dictionary();
htmlAttributes.Add("class", "myCSS");
htmlAttributes.Add("data-attr1", "val1");
htmlAttributes.Add("data-attr2", "val2");
if (Model.LoggedInData.IsAdmin == false)
{
    htmlAttributes.Add("readonly", "readonly");
}


@:User: @Html.TextBoxFor(
    m => m.User,
    htmlAttributes)  

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有