我读了一些帖子,但现在无法找到它,在MVC 3中,并不是真的需要创建一个Validator,只有Attribute.这是真的?我确实说我发现该属性上有IClientValidatable令人困惑.那么,如果注释具有客户端脚本名称(IClientValidatable),那么DataAnnotationsModelValidator类会做什么,以及验证(ValidationAttribute IsValid)的能力?
如果我不必在全局中使用Validator注册Attribute,那将是非常好的.可以这样做吗?我读过一些不好的建议了吗?
编辑:有趣的是我只是通过排除验证器来测试它,将所有逻辑放在IsValid中并且它工作得很好.我想唯一可能缺少的是控制器上下文,但我不确定它在验证中是否有用.如果我需要服务,IsValid有ValidationContext,它有ServiceContainer.我没有在这里找到任何真正的劣势?
编辑2:我将从这个例子中的验证器开始:http://blogs.msdn.com/b/simonince/archive/2010/06/04/conditional-validation-in-mvc.aspx
属性:
public class RequiredIfAttribute : ValidationAttribute, IClientValidatable
{
private RequiredAttribute innerAttribute = new RequiredAttribute();
public string DependentProperty { get; set; }
public object TargetValue { get; set; }
public RequiredIfAttribute(string dependentProperty, object targetValue)
{
this.DependentProperty = dependentProperty;
this.TargetValue = targetValue;
}
public override bool IsValid(object value)
{
return innerAttribute.IsValid(value);
}
public System.Collections.Generic.IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
ModelClientValidationRule modelClientValidationRule = new ModelClientValidationRule()
{
ErrorMessage = FormatErrorMessage(metadata.DisplayName),
ValidationType = "requiredifattribute"
};
modelClientValidationRule.ValidationParameters.Add("requiredifattribute", …Run Code Online (Sandbox Code Playgroud) 我在几个代码示例中看到人们使用IKernel而不是使用IWindsorContainer.为什么是这样?
这是一个例子:http://docs.castleproject.org/(S(kwaa14uzdj55gv55dzgf0vui))/ Windsor.Windsor-tutorial-part-two-plugging-Windsor-in.ashx
在上面的例子中,它来咬我,因为我添加了一个subresolver
Container.Kernel.Resolver.AddSubResolver(
new CollectionResolver(Container.Kernel, true));
Run Code Online (Sandbox Code Playgroud)
这将允许我注入集合......但它没有工作.我发现,因为IKernel正在使用它不能使用温莎的全部功能.为什么有人想要在整个容器上使用内核?我想如果您打算实施Windsor,请使用完整的容器.我错了吗?为什么?
我正在寻找使用Razor和MVC 3的最佳实践.现在我希望的是某种类型的文章,而不仅仅是您自称的最佳实践列表,但如果您有任何发布它们的话.
为什么这个值得?似乎很难找到关于如何最好地使用Razor和MVC视图的信息.我知道典型的MVC最佳实践,我正在寻找特定的Razor.那些使用Razor的人知道它不仅仅是一个代币替代者.我想了解更多关于如何使用Razor设置网站模板的信息.
就像我说的那样,我正在寻找关于这个主题的好资源.
让我们说我在剃须刀中有一些流利的语法,如下所示:
@Model.ListOfStuff.Where(x=>x.StuffProp == "Some Stuff").FirstOrDefault().SomeOtherProp
Run Code Online (Sandbox Code Playgroud)
但是我们可以说这实际上很长,因为它是构建复杂网格的助手.如果它全部在一条线上它工作正常,但当它在多条线上时它会分开.我怎样才能解决这个问题?
@Model.ListOfStuff.Where(x=>x.StuffProp == "Some Stuff")
.FirstOrDefault().SomeOtherProp
Run Code Online (Sandbox Code Playgroud) 我需要在项目中使用Spring .Net并且正在探索配置选项.我能找到关于Spring .Net配置的所有内容都是配置文件.Spring是否支持代码配置?我曾经使用过Castle和Ninject,而且两者似乎都是本土的.我发现了声称会增加支持的项目,但我不想要一些会在6个月内死掉的项目.我发现博客中的引用似乎表明Spring支持这一点,但我找不到任何文档!
第2部分可能会推荐Spring .Net而不是Windsor知道它不能支持流畅的配置吗?我知道两者都是很棒的IoC容器,但是我已经处理过具有Spring配置的大量配置文件的项目,我讨厌它.
我有一个简单的WPF Forms应用程序.我有一个DockPanel作为我的根面板.第一个子节点是StackPanel,其中包含一些控件,然后第二个控件是TabControl.我想要的,面板类型可以改变他们想要的只是TabControl保持窗口的填充大小,除了第一个StackPanel消耗的内容.然而无论我尝试什么,TabControl似乎都会改变它的大小,这取决于它里面的内容,而不是内部的内容.
<Window>
<DockPanel>
<StackPanel> </StackPanel>
<TabControl> </TabControl>
</DockPanel>
</Window>
Run Code Online (Sandbox Code Playgroud) 我希望/怀疑这很容易,所以如果是的话,我会在这里问一个傻瓜.
在我看来,我有一个foreach循环,请注意,这是一个Razor视图.我不知道ASP.NET View引擎是否也这样做......但它可能会.我想在每个循环上翻转一个bool,但它看不到让我.视图引擎窒息死亡.为什么?我该如何解决?我做了一个for循环,我现在做了mod 2,但我真的需要理解这一点.
这是我试过的:
@{
var IsOdd = false;
}
@foreach(var foo in bar)
{
@{ IsOdd = !IsOdd; }
<div class="@(IsOdd ? "odd" : "even")">@foo</div>
}
Run Code Online (Sandbox Code Playgroud) 我有一个属性的类.我们将调用此TestMeCommand(见下文).这个类有一个列表.我需要做的是遍历类的属性,并识别List.现在必须一般地构建它,因为它的验证代码,所以这个相同的代码可能需要识别a List<int>或a List<string>或其他东西.
public class TestMeCommand
{
[Range(1, Int32.MaxValue)]
public int TheInt { get; set; }
[Required]
[StringLength(50)]
public string TheString { get; set; }
[ListNotEmptyValidator]
public List<TestListItem> MyList { get; set; }
public class TestListItem
{
[Range(1, Int32.MaxValue)]
public int ListInt { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
现在问题是我的代码看起来像这样:
foreach (var prop in this.GetType().GetProperties())
{
if (prop.PropertyType.FullName.StartsWith("System.Collections.Generic.List"))
{
IList list = prop.GetGetMethod().Invoke(this, null) as IList;
}
}
Run Code Online (Sandbox Code Playgroud)
我不想把那个字符串放在那里,但如果我做prop.PropertyType之类的东西是IList它永远不会评估为true.我如何解决它?
asp.net-mvc ×4
c# ×3
razor ×2
.net ×1
properties ×1
reflection ×1
spring.net ×1
validation ×1
wpf ×1
wpf-controls ×1