2012-01-22 18 views
21

Tôi đang sử dụng dao cạo MVC3 và tôi đang cố truyền đối tượng cho một phần xem và nó không hoạt động.Làm thế nào để gửi đối tượng mô hình trong Html.RenderAction (MVC3)

này hoạt động tốt mà không gửi mô hình đối tượng đến xem một phần:

Html.RenderAction("Index", "ViewName"); 

Đang cố gắng này không gửi các đối tượng mô hình, tôi nhận được null thay vì (các đối tượng có dữ liệu, và quan điểm hy vọng nó): '

Html.RenderAction("Index", "ViewName", objectModel); 

Điều này thậm chí có thể sử dụng RenderAction không?

Cảm ơn!

Chỉnh sửa: Tôi đã tìm thấy lỗi, đã xảy ra lỗi với thao tác của bộ điều khiển không nhận đối tượng đã gửi. Cảm ơn tất cả sự giúp đỡ của bạn!

+1

bạn có thể cung cấp chữ ký của hành động bạn đang gọi không? – ivowiblo

+0

tại sao bạn chuyển tên hiển thị dưới dạng thông số? bạn nên vượt qua hành động và bộ điều khiển thay vì – ivowiblo

+0

@ Html.RenderAction ("Chỉ mục", "ViewName", mới {objectParam1 = objectModel1, objectParam1 = objectModel2}) –

Trả lời

23

nói rằng bạn muốn vượt qua foo như mô hình, làm cho nó đầu tiên

public class Foo { 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

bây giờ làm cho một ActionResult

public ActionResult FooBar(Foo _foo){ 
    return PartialView(_foo); 
} 

gọi nó

@Html.RenderAction("FooBar", "Controller", new { Name = "John", Age=20 }); 
+0

Cảm ơn câu trả lời của bạn. Tôi đã có một lỗi mà tôi bỏ qua trong chữ ký Hành động của Bộ điều khiển. Cố định nó và bây giờ nó nhận được đối tượng. – Michael

+0

Điều này có vượt qua ModelState không? – aelstonjones

6

Thông thường nếu tôi có một mô hình đã có sẵn nó có ý nghĩa hơn để sử dụng Html.Partial hơn cố gắng để hiển thị một ac sự.

@Html.Partial("Foo", Model.FooModel) 

đâu Foo.cshtml là một tập tin view (có lẽ trong thư mục Shared của bạn) đã gõ mạnh với với @model FooProject.Models.FooModel hoặc bất cứ mô hình của bạn được gọi. Đây có thể là một mô hình phức tạp như bạn cần. Mô hình là mô hình chính của trang mà bạn phải đặt FooModel - hoặc chỉ bỏ qua tham số này nếu chế độ xem Foo sử dụng cùng một kiểu như trang gốc.

RenderAction thường tốt hơn khi bạn có thông số đơn giản, vì bạn chỉ mô phỏng yêu cầu cho một hành động thông thường có tham số chuỗi định tuyến/truy vấn - và sau đó bán lại phản hồi đó vào trang của bạn. Nó hoạt động tốt nếu bạn cần đặt một thứ gì đó trong Bố cục không có sẵn trong mô hình của trang của bạn, chẳng hạn như phần tử trong thanh bên.

29

Bạn thực sự có thể truyền một đối tượng đến một phương thức điều khiển bằng cách sử dụng Hành động. Điều này có thể được thực hiện trên bất kỳ khung nhìn avaialble, ví dụ tôi có một trong một thư viện được chia sẻ để dự án bin thư mục tham chiếu dự án được chia sẻ của tôi (thuộc tính - Sao chép nếu mới hơn trên các tập tin xem, trong Visual Studio). Nó được thực hiện như sau:

Bộ điều khiển:

public class GroovyController : Controller 
{ 
    public ActionResult MyTestView(MyModel m) 
    { 
     var viewPath = @"~\bin\CommonViews\MyTestView"; 
     return View(viewPath, m); 
    } 
} 

trang MVC (sử dụng Razor cú pháp):

@Html.Action("MyTestView", "Groovy", new { m = Model }) 

Lưu ý: trong @ Html.Action, đối tượng mẫu phải là loại MyModel và tham số thứ 3 phải được đặt thành tên biến điều khiển, trong đó có MyModel m. M là những gì bạn phải gán cho, vì vậy tôi làm m = Mô hình.

+7

Đây phải là câu trả lời được chấp nhận. Cảm ơn bạn đã thêm nó sau một năm. –

+0

@ Valamas-AUS Cảm ơn :) – theJerm