views:

67

answers:

2

Hello,

I am having trouble with the with mvc2.

I am using the Entity Framework as my ORM. I have used the POCO Entity Generator to create POCO objects. I moved the generated objects to a separate project. I followed steps outlined here(Tutorial). This is my project structure

Sports.Data - Entity Frmework and Data Access

Sports.Entities - The poco objects generated and buddy classes

Sports.Web - The web application

In the Sports.Entities project I have created buddy classes for the generated pocos.

The problem I am having is that the attributes are being ignored by the mvc. The validation is not working and the correct label text is not being displayed. Instead of 'Shirt Size', 'ShirtSize' is displayed.

What am I doing wrong?

Thanks for any help.

Here is the code.

<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; }
    }
}
A: 

Hmm, the code you posted look pretty solid. Is your view strongly typed and inheriting the appropriate class?

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

also, this might sound like a dumb question, but are you passing the populated Player object back to the view both when you first populate the view and when you post it back? and finally are you making sure to check

 if ModalState.IsValid?
rockinthesixstring
+1  A: 

Thanks for your answer. I figured out the problem. The properties in the buddy classes need to be public. Everything started working after I made the properties public.

public object ShirtSize { get; set; }
jcruz