Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC绑定排除不处理视图模型中的嵌套对象?_C#_.net_Asp.net Mvc 3_Model Binding - Fatal编程技术网

C# ASP.NET MVC绑定排除不处理视图模型中的嵌套对象?

C# ASP.NET MVC绑定排除不处理视图模型中的嵌套对象?,c#,.net,asp.net-mvc-3,model-binding,C#,.net,Asp.net Mvc 3,Model Binding,我已经有一段时间遇到这样的问题了,但我想知道到底发生了什么:) 我有一个简单的ASP.NET MVC视图,它绑定到视图模型类MemberViewModel MemberViewModel包含一个Linq To Sql实体对象,我的表单主要绑定到名为Member的子类,但是我有大约三个其他表单字段绑定到名为Member.User的子类 Member包含有关用户的个人信息,Member.user包含用户名+密码信息,这两个信息都存储在数据库中的单独表中 现在,如我所述,视图的模型对象使用名为Memb

我已经有一段时间遇到这样的问题了,但我想知道到底发生了什么:)

我有一个简单的ASP.NET MVC视图,它绑定到视图模型类
MemberViewModel

MemberViewModel
包含一个Linq To Sql实体对象,我的表单主要绑定到名为
Member
的子类,但是我有大约三个其他表单字段绑定到名为
Member.User
的子类

Member
包含有关用户的个人信息,
Member.user
包含用户名+密码信息,这两个信息都存储在数据库中的单独表中

现在,如我所述,视图的模型对象使用名为
MemberViewModel
的自定义视图模型类,其内容如下:

[Bind(Exclude = "EncryptedPassword")]
public class MemberViewModel : ViewModel
{
    public Member Member { get; set; }

    public string Password { get; set; }
    [DisplayName("Confirm Password")]
    public string ConfirmPassword { get; set; }

    public MemberViewModel() { }
    public MemberViewModel(Member member, SelectList countryList)
    {
        Member = member;
        CountryList = countryList;
    }
}
您可以看到如何只有一个对
成员的引用。成员是一个LINQtoSQL对象,其中包含对
User
的引用
Password
+
ConfirmPassword
和表单字段,并且在Linq到Sql中没有等效的对应项

现在我的问题是,每当我提交表单my
ModelState.IsValid
属性时,总是返回false,说明模型错误为
,EncryptedPassword字段无效

现在,无论我是将
[Bind(Exclude=“Member.User.EncryptedPassword”)]
作为类属性添加到我的
MemberViewModel
中,还是将
用户的部分类本身作为
[Bind(Exclude=“EncryptedPassword”)]
添加到
ModelState.IsValid
中,都会持续声明它无效

  • 我如何才能使其发挥作用并从模型状态验证中排除子属性
  • 绑定排除是如何真正起作用的?对于子对象以及与视图模型一起使用模型绑定的最佳实践是什么
  • 最亲切的问候,
    GONeale

    属性
    [Bind]
    只影响模型绑定。也就是说,ASP.NET MVC框架是否会尝试从请求中填充属性


    您的问题与验证相关-一个完全不同的问题。:)

    虽然不能直接回答您的问题,但我可以提供一些建议:尝试使用DTO在控制器和视图之间传递数据

    你会发现很多第三方组件和库都有这样的假设,所以从长远来看,这会让你的生活更轻松

    通过DTO,我指的是简单的(通常是平面的)对象,它看起来像这样:

    public class Dto
    {
        public string PropertyName { get; set; }
        public string PropertyNameSubPropertyName { get; set; }
    }
    

    有关更多信息,以及帮助DTO和域对象之间映射的工具,请查看..

    LINQ to SQL entitiy中的User.EncryptedPassword是什么数据类型?
    字符串(因此填充字符。此处)谢谢,难以置信!我意识到我有一个继承的
    AssociatedValidatorProvider
    ,它自动将从Linq提取的字段验证添加到Sql模式中。虽然很酷,但它为所有内容添加了验证,包括
    EncryptedPassword
    ,这显然是我不想在表单中出现的。在这里,我试图用
    Bind(Exclude)
    修复它,正如您所说的,它根本不会影响验证-我真傻!我使用
    ModelState.Remove()
    绕过了这些一次性字段。谢谢你的快速回答!