2012-02-09 25 views
6

phép nói rằng tôi có một bộ điều khiển cung cấp chức năng tìm kiếm cho một sinh viên:Chia sẻ quan điểm giữa các bộ điều khiển mà không sử dụng các thư mục Shared

public class StudentSearchController 
{ 
    [HttpGet] 
    public ActionResult Search(StudentSearchResultModel model) 
    { 
     return View(model); 
    } 
} 

Vì vậy, miễn là hành động tìm kiếm được cung cấp một StudentSearchResultModel, nó sẽ làm cho một danh sách các kết quả tìm kiếm.

Có cách nào để mở rộng hiệu quả phương thức hành động này từ bộ điều khiển khác? Ví dụ, cho phép nói rằng tôi muốn có bộ điều khiển khác mà cần phải tìm kiếm cho sinh viên, như thế này: (. Giả sử cả hai mô hình mở rộng StudentSearchResultModel)

public class UniStudentController 
{ 
    [HttpPost] 
    public ActionResult Search(UniStudentSearchResultModel model) 
    { 
     return RedirectToAction("Search", "StudentSearch", model); 
    } 
} 

public class HighSchoolStudentController 
{ 
    [HttpPost] 
    public ActionResult Search(HighSchoolSearchResultModel model) 
    { 
     return RedirectToAction("Search", "StudentSearch", model); 
    } 
} 

Tôi rõ ràng là không thể làm được điều này, bởi vì tôi không thể vượt qua các lớp mô hình được khởi tạo trước đến bộ điều khiển tìm kiếm (bộ điều khiển tìm kiếm ban đầu sẽ tạo lại một StudentSearchResultModel, thay vì sử dụng mô hình đã được truyền).

Giải pháp tốt nhất mà tôi đã đưa ra cho đến nay là di chuyển SearchView.cshtml vào thư mục "Chia sẻ", sau đó tôi có thể hiển thị trực tiếp chế độ xem từ bộ điều khiển Uni/HighSchool (thay vì gọi "RedirectToAction") . Điều đó làm việc tốt, và về lý thuyết, tôi sẽ không cần đến StudentSearchController. Tuy nhiên, tôi đang xây dựng trên mã di sản ở đây (trong ví dụ này, StudentSearchController là di sản), vì vậy mà không cần thực hiện một quá trình tái cấu trúc, thư mục "Shared" không phải là một lựa chọn cho tôi.

Một giải pháp khác là đặt tất cả các hành động liên quan đến tìm kiếm vào StudentSearchController - vì vậy nó sẽ nhận được hai hành động cho UniStudentSearch và HighSchoolStudentSearch. Tuy nhiên, tôi không thích cách tiếp cận này, vì nó có nghĩa là StudentSearchController cần biết về tất cả các tập quán dự định của nó.

Bất kỳ ý tưởng nào?

PS: Không phản đối việc tái cấu trúc, nhưng bị giới hạn bởi thời hạn!

Trả lời

5

bạn có thể đặt đường dẫn của điểm trong cuộc gọi của bạn để xem()

return View("~/Views/StudentSearch/SearchView.cshtml", model); 
+0

True; nhưng SearchView có phụ thuộc vào các chế độ xem khác (ví dụ: @ Html.Partial ("Điều khiển/Sinh viên")) không thể tìm thấy nếu bạn thực hiện phương pháp này. – gerrod

+0

xem xét bạn muốn SearchView được chia sẻ bởi nhiều bộ điều khiển theo cách đó, bạn sẽ phải chính xác hơn với các cuộc gọi đó trong chế độ xem. @ Html.Partial ("~/Điều khiển/Sinh viên") –

Các vấn đề liên quan