Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 12
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Cách để validation trong MVC?

    Cho em hỏi trong asp.net mvc khi tạo model bằng các file class (khởi tạo các biến, phương thức getter, setter, rồi đặt [Required] luôn cho cái biến đó để kiểm tra). Còn khi dùng entity framework nó tự tạo ra hết vậy mình vào đâu để chỉnh cái [Required] đó theo ý mình. Em thấy trên youtube người ta vừa dùng entity framwork mà vẫn tạo class model.

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi luvcjssy
    Cho em hỏi trong asp.net mvc khi tạo model bằng các file class (khởi tạo các biến, phương thức getter, setter, rồi đặt [Required] luôn cho cái biến đó để kiểm tra). Còn khi dùng entity framework nó tự tạo ra hết vậy mình vào đâu để chỉnh cái [Required] đó theo ý mình. Em thấy trên youtube người ta vừa dùng entity framwork mà vẫn tạo class model.
    Tất cả các lớp mà EF tạo ra đều là partial class, có thể khai báo metadata cho nó như sau
    VD:

    Mã:
    [MetadataType(typeof(ProductMetaData))] public partial class Product // khai báo này trùng tên và cùng namespace với lớp Product được tạo ra bởi EF, nhưng cứ để trống ko cần bổ sung gì cả{ } // áp đặt validate attribute ở đâypublic partial class ProductMetaData // cùng namespace với lớp trên{ [Requied]public string Name { get; set; }  [Requied][Display(Name = "Giá")] public int Price { get; set; } }

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Sounj
    Tất cả các lớp mà EF tạo ra đều là partial class, có thể khai báo metadata cho nó như sau
    VD:

    Mã:
    [MetadataType(typeof(ProductMetaData))] public partial class Product // khai báo này trùng tên và cùng namespace với lớp Product được tạo ra bởi EF, nhưng cứ để trống ko cần bổ sung gì cả{ } // áp đặt validate attribute ở đâypublic partial class ProductMetaData // cùng namespace với lớp trên{ [Requied]public string Name { get; set; }  [Requied][Display(Name = "Giá")] public int Price { get; set; } }
    vậy là mình cào class mà EF tạo ra để chỉnh thêm hay mình tạo mới một cái class mới nhưng đặt cùng tên

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Tạo 1 class có cấu trúc tương tự với class EF.

    Nếu dùng MVC thì nên dùng thêm Automapper

    http://automapper.codeplex.com/

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi luvcjssy
    vậy là mình cào class mà EF tạo ra để chỉnh thêm hay mình tạo mới một cái class mới nhưng đặt cùng tên
    Những gì EF data model tạo ra thì ko chỉnh sửa gì cả. Bạn chỉ cần tạo ra những file class mới, vào đó khai báo partial class mới và đặt cùng tên, cùng namespace với EF dbcontext mà bạn đã tạo ra

    Còn lý do tại sao có thể khai báo partial class cùng tên này thì bạn vui lòng tìm hiểu về từ khóa partial trong C#

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Sounj
    Những gì EF data model tạo ra thì ko chỉnh sửa gì cả. Bạn chỉ cần tạo ra những file class mới, vào đó khai báo partial class mới và đặt cùng tên, cùng namespace với EF dbcontext mà bạn đã tạo ra

    Còn lý do tại sao có thể khai báo partial class cùng tên này thì bạn vui lòng tìm hiểu về từ khóa partial trong C#
    Những gì EF tạo ra là không chỉnh được hay là không nên chỉnh sửa vậy bạn? vì bữa trước mình làm cái ví dụ để test cái login, mình có vô class Account.cs mà EF tạo ra, mình để validation trong đó nó vẫn chạy được

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi luvcjssy
    Những gì EF tạo ra là không chỉnh được hay là không nên chỉnh sửa vậy bạn? vì bữa trước mình làm cái ví dụ để test cái login, mình có vô class Account.cs mà EF tạo ra, mình để validation trong đó nó vẫn chạy được
    Mình có nói "không thể chỉnh sửa được" đâu nhể [IMG]images/smilies/laughing.gif[/IMG]
    Bạn đương nhiên vẫn có thể vào đó chỉnh sửa, nhưng đây là hành động không nên làm , bởi vì nếu bạn chỉnh sửa trong đó, và sau đó vì lý do gì đó bạn cần cho Entity Data Model update lại thì tất cả những gì bạn chỉnh sửa sẽ mất hết trơn sau thao tác update này
    => Đó là lý do nên xài Metadata trong tình huống này. Metadata được bạn khai báo riêng ở 1 nơi khác, và ko bị ảnh hưởng gì sau thao tác update nếu có

  8. #8
    Trích dẫn Gửi bởi Sounj
    Tất cả các lớp mà EF tạo ra đều là partial class, có thể khai báo metadata cho nó như sau
    VD:

    Mã:
    [MetadataType(typeof(ProductMetaData))] public partial class Product // khai báo này trùng tên và cùng namespace với lớp Product được tạo ra bởi EF, nhưng cứ để trống ko cần bổ sung gì cả{ } // áp đặt validate attribute ở đâypublic partial class ProductMetaData // cùng namespace với lớp trên{ [Requied]public string Name { get; set; }  [Requied][Display(Name = "Giá")] public int Price { get; set; } }
    Chào bạn,

    Ví dụ mình đang có một project MVC 5.

    Và có Models \ ModelABC.edmx \ ModelABC.tt \ User.cs

    Giờ mình muốn thêm một partial class cho User.cs để thêm valiadation thì mình tạo file .cs mới như thế nào ? Đặt cùng tên User.cs ? và đặt ở đâu ?

    Cám ơn bạn !

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Shinichi
    Chào bạn,

    Ví dụ mình đang có một project MVC 5.

    Và có Models \ ModelABC.edmx \ ModelABC.tt \ User.cs

    Giờ mình muốn thêm một partial class cho User.cs để thêm valiadation thì mình tạo file .cs mới như thế nào ? Đặt cùng tên User.cs ? và đặt ở đâu ?

    Cám ơn bạn !
    Bạn vào file Models \ ModelABC.edmx \ ModelABC.tt \ User.cs đọc xem nó được khai báo trong namespace nào. Bạn sẽ khai báo 2 lớp User và UserMetadata mới thuộc cùng namespace này. Còn đặt ở đâu là tùy ý bạn chứ ko quan trọng. VD bạn có thể vào thư mục Model, chuột phải chọn add new class file, thêm vào 1 file có tên là UserMetadata.cs . Trong file này bạn khai báo như sau

    Mã:
    //using .....//using ....using System.ComponentModel.DataAnnotations; namespace Ungdung.Model // giả sử đây là namespace của \ ModelABC.edmx \ ModelABC.tt \ User.cs{    [MetadataType(typeof(UserMetaData))]     public partial class User    {}     public partial class UserMetaData    {        // trong lớp này, bạn có thể copy các property như Name, Password ..v...v. bên \ ModelABC.edmx \ ModelABC.tt \ User.cs        // qua đây ( copy những property bạn cần ko cần copy hết tất cả, nhưng ko đc phép thay đổi/chỉnh sửa mà phải giữ nguyên        // sau đó thì có thể áp dụng các Validation như Required, DataType, StringType vào đây        [Required]        [StringLength(10)]        public string Name { get; set }          [Required]        public string Password { get; set }    }}

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Sounj
    Bạn vào file Models \ ModelABC.edmx \ ModelABC.tt \ User.cs đọc xem nó được khai báo trong namespace nào. Bạn sẽ khai báo 2 lớp User và UserMetadata mới thuộc cùng namespace này. Còn đặt ở đâu là tùy ý bạn chứ ko quan trọng. VD bạn có thể vào thư mục Model, chuột phải chọn add new class file, thêm vào 1 file có tên là UserMetadata.cs . Trong file này bạn khai báo như sau

    Mã:
    //using .....//using ....using System.ComponentModel.DataAnnotations; namespace Ungdung.Model // giả sử đây là namespace của \ ModelABC.edmx \ ModelABC.tt \ User.cs{    [MetadataType(typeof(UserMetaData))]     public partial class User    {}     public partial class UserMetaData    {        // trong lớp này, bạn có thể copy các property như Name, Password ..v...v. bên \ ModelABC.edmx \ ModelABC.tt \ User.cs        // qua đây ( copy những property bạn cần ko cần copy hết tất cả, nhưng ko đc phép thay đổi/chỉnh sửa mà phải giữ nguyên        // sau đó thì có thể áp dụng các Validation như Required, DataType, StringType vào đây        [Required]        [StringLength(10)]        public string Name { get; set }          [Required]        public string Password { get; set }    }}
    Mình đã tạo một folder Partial trong Models, add class User.cs

    và khai báo như vầy:



    Mã:
    public partial class User    {        // trong lớp này, bạn có thể copy các property như Name, Password ..v...v. bên \ ModelABC.edmx \ ModelABC.tt \ User.cs        // qua đây ( copy những property bạn cần ko cần copy hết tất cả, nhưng ko đc phép thay đổi/chỉnh sửa mà phải giữ nguyên        // sau đó thì có thể áp dụng các Validation như Required, DataType, StringType vào đây        [Required]        [StringLength(10)]        public string Name { get; set }          [Required]        public string Password { get; set }    }
    Sau đó compile chưa thấy lỗi. Cách làm của mình có chính thống (pure) MVC không nhỉ ? [IMG]images/smilies/icon_question.gif[/IMG]

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •