Kip*_*pie 2 razor asp.net-mvc-4
我在ASP.Net MVC 4中遇到了一些奇怪的行为.
基于我的viewmodel中的一些信息,我试图设置一些条件属性,如下所示:
<input type="checkbox" data-primary=@(Model.IsPrimary ? "true" : null) checked="@(Model.Selected ? "checked" : null)" disabled="@(Model.Disabled ? "disabled" : null) />
这对于checked和disabled属性工作得很好和花花公子,但由于某种原因它总是会渲染data-primary属性.Model.IsPrimary会导致正确data-primary="true",但!Model.IsPrimary导致空洞的data-primary归属.
这引出了我的第一个问题: 是什么导致了这种奇怪的行为?是因为我正在使用数据属性吗?它是数据属性中的破折号吗?
在那之后,我想,"好吧,确定,这很容易修复",并修复我的代码:
<input type="checkbox" @(Model.IsPrimary ? "data-primary=\"true\"" : String.Empty) checked="@(Model.Selected ? "checked" : null)" disabled="@(Model.Disabled ? "disabled" : null) />
这修复了我的data-primary属性显示,但不知何故,我的disabled和checked属性后来显示为空.
我现在的第二个问题是什么导致了这种行为?据我所知,我的代码中没有语法怪异.
如果有人有任何关于为什么剃刀这样做的信息,请回复.
PS:最后,我通过将我的data-primary属性放在input元素的末尾来"修复"事物,使一切都按预期运行.
从文件中的Razor 2的来源HtmlMarkupParser.Block.cs:
private void AttributePrefix(IEnumerable<HtmlSymbol> whitespace, IEnumerable<HtmlSymbol> nameSymbols)
{
// First, determine if this is a 'data-' attribute (since those can't use conditional attributes)
LocationTagged<string> name = nameSymbols.GetContent(Span.Start);
bool attributeCanBeConditional = !name.Value.StartsWith("data-", StringComparison.OrdinalIgnoreCase);
...
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么他们这样做但似乎是设计的.
| 归档时间: |
|
| 查看次数: |
702 次 |
| 最近记录: |