标签: isrequired

DataMember IsRequired属性是否与Nullable类型相矛盾?

我今天在WCF合同中遇到过这个问题:

[DataMember(IsRequired = true)]
public DateTime? LastModified { get; set; } 
Run Code Online (Sandbox Code Playgroud)

可以IsRequired = True和可空的后果是什么DateTime?他们似乎彼此矛盾.

.net c# wcf datamember isrequired

15
推荐指数
1
解决办法
2万
查看次数

将DataMember添加到WCF中的现有DataContract

我想DataMember在我DataContract的一个中添加一个.我想知道DataMember如果没有更新其中一方,现有服务器和客户端将如何在新的情况下运行.

我记得有一种方法可以DataMember选择,但我想知道它是否适用于所有场景:

  • 更新了Client => old Server
  • 旧客户端=>更新服务器
  • 更新的客户端<=旧服务器
  • 旧客户端<=已更新服务器

.net wcf datacontract datamember isrequired

12
推荐指数
1
解决办法
4386
查看次数

MVC HtmlHelper与FluentValidation 3.1:获取ModelMetadata IsRequired的麻烦

我创建了一个HtmlHelper for Label,如果需要关联字段,则在该Label的名称后面放置一个星号:

public static MvcHtmlString LabelForR<TModel, TValue>(
        this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
    return LabelHelper(
        html,
        ModelMetadata.FromLambdaExpression(expression, html.ViewData),
        ExpressionHelper.GetExpressionText(expression),
        null);
}

private static MvcHtmlString LabelHelper(HtmlHelper helper, ModelMetadata metadata, string htmlFieldName, string text)
{
    ... //check metadata.IsRequired here
    ... // if Required show the star
}
Run Code Online (Sandbox Code Playgroud)

如果我在我的ViewModel中的属性上使用DataAnnotations和slap [Required],我的私有LabelHelper中的metadata.IsRequired将等于True,并且一切都将按预期工作.

但是,如果我使用FluentValidation 3.1并添加一个简单的规则:

public class CheckEmailViewModelValidator : AbstractValidator<CheckEmailViewModel>
{
    public CheckEmailViewModelValidator()
    {
        RuleFor(m => m.Email)
            .NotNull()
            .EmailAddress();
    }
}
Run Code Online (Sandbox Code Playgroud)

...在我的LabelHelper metadata.IsRequired将被错误地设置为false.(验证器有效:你不能提交空字段,它需要像电子邮件一样).
其余元数据看起来正确(例如:metadata.DisplayName ="Email").
理论上,如果使用Rule .NotNull(),FluentValidator会在属性上使用RequiredAttribute.

对于参考:我的ViewModel:

[Validator(typeof(CheckEmailViewModelValidator))]
public class CheckEmailViewModel
{
    //[Required] …
Run Code Online (Sandbox Code Playgroud)

html-helper modelmetadata fluentvalidation asp.net-mvc-3 isrequired

6
推荐指数
1
解决办法
1268
查看次数

WCF数据合同 - 实施所需值的最佳/最简洁方法?

我有一个WCF数据契约与一堆原始类型的属性,如int和decimal,DateTime(当然,这是一个结构).

我的同事建议将它们全部为可空,然后通过检查null来验证服务端的必需值.我相信部分原因是因为它是一个可序列化的对象,所以你不能用数据契约上的构造函数强制执行所需的值 - 它避免了测试默认值的麻烦.

但是,我还希望在合同中隐含必需的属性,以便客户可以了解所需的属性.

所以不要做类似的事情,

[DataMember] 
public Nullable<int> AgencyID { get; set; }
Run Code Online (Sandbox Code Playgroud)

这将允许我在服务端干净地测试null,我这样做:

[DataMember(IsRequired = true, EmitDefaultValue = true)] 
public int AgencyID { get; set; }
Run Code Online (Sandbox Code Playgroud)

我的理解是,如果没有为属性分配值或者默认值为0,这将抛出异常 - 这是所需的行为.这是在客户端执行所需属性的最佳实践吗?让一切都可以为空并在服务端检查它有什么好处吗?

wcf datacontract non-nullable isrequired

4
推荐指数
1
解决办法
7747
查看次数