在我的cshtml文件中,我有很多块,有这样的东西:
@if(Model.foo)
{
<span>Hello World</span>
}
Run Code Online (Sandbox Code Playgroud)
跨度的唯一原因是因为我找不到任何其他方法来强制它识别"Hello World"是html的一部分,除非我将它包围在html标签中.是否有一种很好的方法来逃避不涉及向显示器添加无意义标签的代码?
我的模型有一个必须可以为空的布尔值
public bool? Foo
{
get;
set;
}
Run Code Online (Sandbox Code Playgroud)
所以在我的Razor cshtml中
@Html.CheckBoxFor(m => m.Foo)
Run Code Online (Sandbox Code Playgroud)
除了不起作用.也没有(bool)施放它.如果我做
@Html.CheckBoxFor(m => m.Foo.Value)
Run Code Online (Sandbox Code Playgroud)
这不会产生错误,但在发布时它不会绑定到我的模型,并且foo设置为null.什么是在页面上显示Foo并使其在帖子上绑定到我的模型的最佳方式?
我有一个控制器
[MyAttribute]
public class MyController: Controller
{
public MyController(InterfaceA a, InterfaceB b)
{
}
}
Run Code Online (Sandbox Code Playgroud)
如果请求来自具有MyAttribute的控制器,我希望InterfaceA始终绑定到ClassA.所以我打了个电话.
Bind<InterfaceA>.To<ClassA>().WhenClassHas<MyAttribute>();
Run Code Online (Sandbox Code Playgroud)
InterfaceB的一个实例化,ClassB,有一个像这样的构造函数.
public ClassB(InterfaceC c)
Run Code Online (Sandbox Code Playgroud)
我希望InterfaceC在被调用的控制器具有MyAttribute时绑定到C类.但是,我以前的绑定不起作用,因为父类是中间类,而不是控制器本身.反正有没有写绑定所以如果调用控制器具有属性,它将在任何地方工作?
编辑:我的解决方案使用雷莫的建议
public static IBindingInNamedWithOrOnSyntax<TBinding> WhenControllerHasAttribute<TBinding>(this IBindingWhenSyntax<TBinding> instance, Type type)
{
Func<IRequest, bool> hasAttribute = (request) =>
{
while (request.ParentRequest.Target != null)
{
request = request.ParentRequest;
}
return request.Target.Member.ReflectedType.IsDefined(type, false);
};
return instance.When(hasAttribute);
}
Run Code Online (Sandbox Code Playgroud)