Truyền tham chiếu vào Action nhưng thành giá trị null trong asp.net MVC5 EF6

Chào mọi người. Mình vừa tập lập trình web asp.net. Mình dùng mô hình MVC với Entity Framework 6 và theo hướng database first. Đại loại mình có 1 bảng sản phẩm như thế này

sanpham( sanpham_id int,
tensanpham string,
loaisanpham_id int)

và 1 bảng loại sản phẩm.

loaisanpham( loaisanpham_id int,
tenloai string)

Mình muốn làm chức năng hiển thị sản phẩm theo loại, mình có viết 1 hàm trong controller cho chức năng này. Nhưng mỗi khi chạy link vào controller thì nó toàn vào vòng if giá trị truyền vào là null.

public ActionResult danhmucloaisanpham(int? loaisanphamID)
{
    if (loaisanphamID == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    var items = db.sanphams.Where(s => s.loaisanpham_id == loaisanphamID);
    if (items == null)
    {
        return HttpNotFound();
    }
    return View(items.ToList());
}

Trong view của trang này thì mình chỉ gọi đơn giản ra là tên của các sản phẩm đã kiếm bằng vòng foreach. Nhưng khi mình chạy đường dẫn link vào Action này thì toàn vào BadRequest. Sau 1 hồi mò thì mình đổi tên tham số thành id thì nó chạy được. Mọi người cho hỏi là vì sao ạ ?
Mình cũng có 1 câu hỏi khác là nếu mình muốn search theo nhiều cách khác nhau ( hãng sản phẩm, giá, … ) mà đều trả về trên cùng 1 trang thì mình phải viết nhiều cái ActionResult với các tham số khác nhau hay mình nên tạo 1 câu truy vấn bên View rồi gởi về bên Controller rồi mới chạy hay còn cách nào khác ạ ? Cảm ơn mọi người trước

Do RouteConfig nó không hiểu loaisanphamID là tham số truyền về. Bạn có thể tùy biến tham số này để có thể truyền về nhiều kiểu dữ liệu hay nhiều tên khác nhau.
Còn câu hỏi thứ 2 của bạn thì mình nghĩ bạn tìm hiểu về annotion trên từng action với cùng 1 name action.

1 Like

Bạn ơi, cho mình hỏi. Cái RouteConfig là mình phải thêm phần mapRoute phải không? Như vậy mỗi lần mình viết hàm có tham số truyền vào là kiểu khác (string, bool, float, … ) thì mình phải viết mapRoute khác nhau cho từng cái à? Mình có đọc thử qua các bài về RouteCofig thì chỉ có nói chung chung về thay đổi Url cho đẹp.Mình có tải thử project ở dưới, nhưng thấy phần Sorting và Filtering không có mapRoute nào trong file RouteConfig cả (có mapRoute mặc định) trong khi 2 hàm ActionResult đó nó có các tham số khác nhau.

Vậy có lẽ ở view bạn truyền tham số về ntn?

vd ở view bạn dùng form để submit thì 1 textbox phải có id là loaisanphamID nó mới hiểu được

1 Like

Mình hiểu ra rồi, cảm ơn bạn nhiều lắm

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?