Thứ hai, ngày 5 tháng 12 năm 2016

Cải thiện các phương thức Details và Delete - aspnet mvc

Ngày đăng: 9/10/2012, 9:20:56AM | Lượt xem: 2,887
Hot!
tag ,

 Khi bạn tạo TaskController, ASP.NET MVC đã tự động tạo ra các mã lệnh và chúng hoạt động rất tốt, tuy nhiên bạn vẫn cần cải thiện để cho chúng hoạt động hiệu quả hơn.

 Bạn hãy mở mã cài đặt cho TaskController và thay đổi phương thức Details bằng cách trả về HttpNotFound khi không tìm thấy Task cần tìm. Bạn cũng có thể cập nhật phương thức Details để quy định giá trị mặt định của id được truyền vào cho action này. Tuy nhiên khi bạn trả về đối tượng HttpNotFound, bạn cần phải thay đổi kiểu trả về của action Details từ ViewResult thành ActionResult, bởi HttpNotFound không kế thừa từ ViewResult. 

public ActionResult Details(int id = 0)
        {
            Task task = db.Tasks.Find(id);
            if(task == null)
            {
                return HttpNotFound();
            }
            return View(task);
        } 

Sau khi đã điều chỉnh action này, khi bạn muốn xem thông tin của một task có id không tồn tại, ứng dụng sẽ trả về mã 404 để báo rằng ứng dụng không tìm thấy tài nguyên mong muốn (ví dụ như truy xuất /Task/Details/13343 chẳng hạn).

 

Đối với phương thức Delete, bạn cần lưu ý rằng phương thức này không được dùng để xóa dữ liệu, lý do là bạn không nên sử dụng các action đáp ứng GET Request để thay đổi dữ liệu, bởi nó sẽ tạo ra lổ hổng bảo mật (tôi sẽ có bài viết về điều này).

 

Phương thức DeleteConfirmed chỉ chấp nhận các POST request được cái đặt để xóa dữ liệu. Hai phương thức Delete và DeleteConfirmed được 

Visual Studio sinh ra như sau:

public ActionResult Delete(int id)
        {
            Task task = db.Tasks.Find(id);
            return View(task);
        }

        //
        // POST: /Task/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {            
            Task task = db.Tasks.Find(id);
            db.Tasks.Remove(task);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

Tuy phương thức DeleteConfirmed có tên không phải là Delete, nhưng nó vẫn được ánh xạ với POST Request yêu cầu action Delete xử lý, đó là nhờ vào annotation [HttpPost, ActionName("Delete")]. Tuy nhiên, bạn vẫn có thể đặt tên trực tiếp cho phương thức DeleteConfirmed thành tên Delete chỉ bằng cách thêm vào tham số để cho số lượng tham số của phương thức này khác với phương thức Delete dùng để đáp ứng các GET request. Ví dụ như bạn có thể thêm vào tham số có kiểu là FormCollection, và bạn không cần phải dùng nó.

[HttpPost]
        public ActionResult Delete(FormCollection fcNotUsed,int id)
        {            
            Task task = db.Tasks.Find(id);
            if (task == null)
            {
                return HttpNotFound();
            }
            db.Tasks.Remove(task);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

SourceCode

Nguồn d.jou.vn
 Chia sẻ qua: 
Hot!
Ý kiến bạn đọc

These items will be permanently deleted and cannot be recovered. Are you sure?

Gallery

image

Maecenas viverra rutrum pulvinar

Maecenas viverra rutrum pulvinar! Aenean vehicula nulla sit amet metus aliquam et malesuada risus aliquet. Vestibulum rhoncus, dolor sit amet venenatis porta, metus purus sagittis nisl, sodales volutpat elit lorem…

Read more

Text Links

Thiết kế logo chuyên nghiệp Insky
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
Copyright © 2011 - 2012 vietshare.vn by phamkhuong102@gmail.com doanhkisi2315@gmail.com. All rights reserved.