DataAnnotation属性在Asp.Net MVC2中不起作用

时间:2010-07-09 01:03:07

标签: asp.net asp.net-mvc entity-framework asp.net-mvc-2 data-annotations

我在使用mvc2时遇到了麻烦。

我使用实体框架作为我的ORM。我使用POCO实体生成器来创建POCO对象。我将生成的对象移动到一个单独的项目中。我按照此处列出的步骤(Tutorial)。这是我的项目结构

Sports.Data - 实体Frmework和数据访问

Sports.Entities - 生成的poco对象和好友类

Sports.Web - 网络应用程序

在Sports.Entities项目中,我为生成的pocos创建了好友类。

我遇到的问题是mvc忽略了这些属性。验证不起作用,并且未显示正确的标签文本。而不是'衬衫尺寸',显示'ShirtSize'。

我做错了什么?

感谢您的帮助。

这是代码。

<div>
    <%: Html.LabelFor(m => m.Player.ShirtSize)%>
</div>
<div class="editor-field">
    <%: Html.EditorFor(m => m.Player.ShirtSize) %>
    <%: Html.ValidationMessageFor(m => m.Player.ShirtSize)%>
<div>

    namespace Sports.Entities
{
    [MetadataType(typeof(PlayerMetadata))]
    public partial class Player
    {
        public double PointsPerGame { 
            get { return (double) this.Points / this.MatchesPlayed; }
        }
    }
    public class PlayerMetadata
    {
        [Required(AllowEmptyStrings = false, ErrorMessage = "First Name is required.")]
        [StringLength(50, ErrorMessage = "First Name must be 50 characters or less")]
        [DataType(DataType.Text)]
        object FirstName { get; set; }

        [Required(AllowEmptyStrings = false, ErrorMessage = "Last Name is required.")]
        [StringLength(50, ErrorMessage = "First Name must be 50 characters or less")]
        [DataType(DataType.Text)]
        object LastName { get; set; }

        [Required(ErrorMessage = "Shirt Size is required.")]
        [EnumDataType(typeof(ShirtSizeEnum), ErrorMessage = "Shirt Size is invalid.")]
        [DisplayName("Shirt Size")]
        object ShirtSize { get; set; }

        [Required(ErrorMessage = "Gender is required.")]
        [EnumDataType(typeof(GenderEnum) , ErrorMessage = "Gender is invalid.")]
        object Gender { get; set; }

        [Required(AllowEmptyStrings = false , ErrorMessage = "Date of birth is required.")]
        [DataType(DataType.Date)]
        object DateOfBirth { get; set; }
    }
}

2 个答案:

答案 0 :(得分:1)

感谢您的回答。我解决了这个问题。好友类中的属性需要公开。在我公开财产后,一切都开始了。

public object ShirtSize { get; set; }

答案 1 :(得分:0)

嗯,你发布的代码看起来很稳固。您的视图是否是强类型并继承了相应的类?

Inherits="System.Web.Mvc.ViewPage(Of YourWebApp.Sports.Entities.Player)

另外,这可能听起来像一个愚蠢的问题,但是当你第一次填充视图和发回它时,你是否将填充的Player对象传递回视图?最后你确定要检查

 if ModelState.IsValid?