我有一个ASP.Net MVC3Web应用程序,我正在使用HtmlHelper类向视图页面添加一个复选框,如下所示……
@Html.CheckBox("CheckBox1", true, new { @class = "Class1" })
我想做的是根据视图状态属性有条件地添加disabled属性。基本上,以下内容将是理想的……
@Html.CheckBox("CheckBox1", true, new { @class = "Class1", @disabled = Model.ReadOnly })
不幸的是,由于disabled属性的性质,这将不起作用,因为分配给disabled属性的任何false值(甚至“”)都将被转换为true。
我已经想出了一些解决方案来解决这个问题,所以问题不是我如何做到这一点。但是,有没有像上面期望的方法那样的简单方法呢?或者我必须求助于以下方法之一?
我知道我能做的..。
发布于 2011-11-02 23:14:09
在视图/帮助器中的某个位置定义它
@functions {
object getHtmlAttributes (bool ReadOnly, string CssClass)
{
if (ReadOnly) {
return new { @class = CssClass, @readonly = "readonly" };
}
return new { @class = CssClass };
}
}
然后使用:
@Html.TextBox("name", "value", @getHtmlAttributes(Model.ReadOnly, "test"))
发布于 2012-12-18 06:05:44
下面是我对这个类似问题的回答:https://stackoverflow.com/a/13922813/495000
我创建了以下Helper -它接受一个布尔值和一个匿名对象。如果disabled为true,它会将disabled属性添加到匿名对象(实际上是一个字典)中,值为"disabled",否则根本不会添加该属性。
public static RouteValueDictionary ConditionalDisable(
bool disabled,
object htmlAttributes = null)
{
var dictionary = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
if (disabled)
dictionary.Add("disabled", "disabled");
return dictionary;
}
它的实际应用的一个示例:
@Html.TextBoxFor(m => m.SomeProperty,
HtmlHelpers.ConditionalDisable(true, new { @class = "someClass"))
对我来说,这种方法的一个巨大优势是,它可以与几乎所有的MVC HtmlHelpers一起工作,因为它们都有接受RouteValueDictionary而不是匿名对象的重载。
警告
HtmlHelper.AnonymousObjectToHtmlAttributes()
使用一些花哨的代码忍者工作来完成任务。我不能完全确定它有多好。但对于我使用它的目的来说已经足够了。您的里程可能会有所不同。
我不太喜欢它的名字--但我想不出比这更好的名字了。重命名很容易。
我也不喜欢它的用法语法--但我再也想不出更好的了。改变这一点应该不难。对象上的扩展方法是一种想法...你最终会得到new { @class = "someClass" }.ConditionalDisable(true)
,但是如果你只想要disable属性,并且没有任何额外的东西可以添加,那么你最终会得到像new {}.ConditionalDisable(true);
这样的东西,而且你还会得到一个对所有object
都显示的扩展方法……这可能是不可取的。
发布于 2013-06-26 00:11:47
如果您希望在不需要助手函数的情况下使用更简洁的语法,则可以在定义用于@HTML.Checkbox助手的html属性的字典时使用三元语句...
@Html.CheckBox("CheckBox1", true, Model.ReadOnly
? new { @class = "Class1", @disabled = Model.ReadOnly }
: null)
在这种情况下,如果Model.ReadOnly为false,则将null作为html属性的字典传递。
https://stackoverflow.com/questions/7978137
复制相似问题