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

    Tạo menu load csdl trên template MVC3 razor

    như các bạn đã biết.trên trang template của mvc không có file cs kèm theo như web form nên để load dữ liệu ta phải làm theo cách khác.

    database:
    Mã:
    create table DanhMucSanPham(
    MaDanhMucSanPham int identity(1,1) primary key,
    TenDanhMucSanPham nvarchar(50) not null,
    MoTaTenDanhMucSanPham varchar(50),
    )
    go
    create table LoaiSanpham(
    MaLoaiSanPham int identity(1,1) primary key,
    MaDanhMucSanPham int references DanhMucSanPham(MaDanhMucSanPham) not null,
    TenLoaiSanPham nvarchar(50) not null,
    MoTaTenloaiSanPham varchar(50),
    )
    giờ ta muốn load menu các danh mục sản phẩm từ database và bên trong mỗi thư mục lại có các loại sản phẩm có khóa liên kết với danh mục sản phẩm.

    models cho template có cấu trúc khác với các model cho controllers
    Mã:
    public class Template
        {
            public static List<DanhMucSanPham> danhmucsanpham = load_dmsp();
            public static List<LoaiSanpham> loaisanpham = load_lsp();
            static List<DanhMucSanPham> load_dmsp()
            {
                KanTasEntities db = new KanTasEntities();
                var data = (from d in db.DanhMucSanPham
                             select d).ToList();
                if (data.Count>0)
                {
                    return data;
                }
                return  null;
            }
            static List<LoaiSanpham> load_lsp()
            {
                KanTasEntities db = new KanTasEntities();
                var data = (from d in db.LoaiSanpham
                            select d).ToList();
                if (data.Count > 0)
                {
                    return data;
                }
                return null;
            }
        }
    controllers? template thì làm gì có controllers [IMG]images/smilies/smile.png[/IMG]
    Views ->Shared-> _Template.cshtml
    Mã:
    @using Kanta.Models
    <!DOCTYPE html>
    <html>
    <head>
    ...
    
    ...
    <ul id="nav">
                        @if(Template.danhmucsanpham!=null)
                        {
                            foreach (var item1 in Template.danhmucsanpham)
                            {
                                <li><a href="#">@item1.TenDanhMucSanPham</a>
                                    @if (Template.loaisanpham != null)
                                    {
                                        <ul>
                                            @foreach (var item2 in Template.loaisanpham)
                                            {
                                                if (item2.MaDanhMucSanPham == item1.MaDanhMucSanPham)
                                                {
                                                    <li>@Html.RouteLink(item2.TenLoaiSanPham, "SanPham", new {controller="SanPham", Action="DanhSachSanPham", dmsp =item2.DanhMucSanPham.MoTaTenDanhMucSanPham, lsp=item2.MoTaTenloaiSanPham, id=item2.MaLoaiSanPham})</li>
                                                }
                                            }
                                        </ul>
                                    }
                                </li>
                            }
                        }
                    </ul>
    ...
    ảnh demo


  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    ưu điểm của dùng model static này là việc load menu giống như session vậy.load một lần nếu ta chưa thoát hẳn một tiến trình(tắt hết các tab trang đó).vậy sẽ giúp cho việc truy xuất tới csdl ít đi
    nhược điểm là nếu bạn vừa add thêm một danh mục thì nó sẽ không update ngay mà khi người dùng thoát hết vào lại mới update.
    cách thứ 2 là bạn dùng jquery hoặc ajax load jones đến một controllers nào đó để load dữ liệu.nhưng thao tác trên javascrip chắc hẳn sẽ khó sử lý hơn rồi.
    ai có ý kiến gì góp ý nha!thank

    đã có một cách khác tối ưu hơn hẳn cách trên rồi.dùng PartialPage.
    demo

    - controler
    Mã:
    [ChildActionOnly]//muon goi tu view sang controll thi phai co cai nay nhe.dung them [httpget] vao nhe
    public ActionResult ViewProfile(String ac)
            {
                if (ac != null)
                {
                    RecruitmentEntities db = new RecruitmentEntities();
                    var data = (from d1 in db.Profile
                                join d2 in db.Account on d1.IDAcount equals d2.IDAcount
                                where d2.NameAcc.Equals(ac)
                                select d1).ToList();
                    if (data.Count > 0)
                    {
                        ViewBag.data = data[0];
                        return PartialView("_Profile");
                    }
                    ViewBag.mess = "Không tìm thấy thông tin tài khoản này";
                    return View("Error");
                }
                return View("Error");
            }
    trang view _profile
    Mã:
    <div>
            @if(ViewBag.data!=null)
            {
                @:Name: @ViewBag.data.Name 
                @:Age: @ViewBag.data.Age 
                @:Brithday: @ViewBag.data.Brithday 
                @:Phone: @ViewBag.data.Phone
                @:Address @ViewBag.data.Address 
                @:Email: @ViewBag.data.Email 
                @:Sex: @ViewBag.data.Sex 
                
            }
    </div>
    bên template gọi

    view template
    Mã:
    @Html.Action("ViewProfile","Partial",new{ac =Session["Login"].ToString()})

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn có thể Demo được không?
    Có Demo sẽ dễ hiểu hơn.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    bạn nào demo di. mình cũng đang bí chỗ này. load ra cái menu da cấp thì càng tốt [IMG]images/smilies/2.gif[/IMG]

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    thấy cách các bác làm khá hay, em cũng đang học MVC3, bác có demo post lên cho anh em cùng vọc nha.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    share: _Layout.cshtml (template)
    Code:
    Mã:
    <div id="conten">
                @Html.Action("Menu","Home") @*hoặc @{Html.RenderAction("Menu","Home");}*@
                @this.RenderBody()
            </div>
    controller: HomeController.cs
    Code:
    Mã:
    [ChildActionOnly]//muon goi tu view sang controll thi phai co cai nay nhe.dung them [httpget] vao nhe
    public ActionResult Menu()
            {
                CMSEntities db = new CMSEntities();
                List<Menu> menu= db.Menus..ToList();
                return this.PartialView("_Menu", menu);
            }

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi ducnv_b01048
    share: _Layout.cshtml (template)
    Code:
    Mã:
    <div id="conten">
                @Html.Action("Menu","Home") @*hoặc @{Html.RenderAction("Menu","Home");}*@
                @this.RenderBody()
            </div>
    controller: HomeController.cs
    Code:
    Mã:
    [ChildActionOnly]//muon goi tu view sang controll thi phai co cai nay nhe.dung them [httpget] vao nhe
    public ActionResult Menu()
            {
                CMSEntities db = new CMSEntities();
                List<Menu> menu= db.Menus..ToList();
                return this.PartialView("_Menu", menu);
            }
    bạn ơi thế mình muốn load menu 2 tầng hoặc hơn thì mình làm như thế nào ?

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    mình chỉ gợi ý bạn được thôi.chứ không có thời gian làm demo được.tại bận quá
    bạn tạo db menu.vd
    id | ten | id_parent
    1 | lv1 | null
    2 | lv2 | 1
    2 | lv2 | 1

    bạn lấy dữ liệu của nó ra mà forech thôi.còn lại là thuật toán.mình chắc bạn sẽ nghĩ được [IMG]images/smilies/1.gif[/IMG]

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    bạn có thể chỉ mình cách gọi controller từ menu động gọi từ database không
    đây là nội dung: http://diendan.congdongcviet.com/sho...d.php?t=156685

  10. #10
    Bạn chủ topic có thể hướng dẫn đầy đủ, chi tiết hơn chút được không. Tại mình mới tìm hiểu MVC 3 nên chưa hiểu làm. Có demo đính kèm thì hay biết mấy. Thanks

 

 
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
  •