2011-09-03 2 views
57

Tôi rất nhầm lẫn với quan điểm phần này ...Làm thế nào tôi có thể tải Nhìn ra một khoảng bên trong xem

Tôi muốn tải một cái nhìn cục bộ bên trong giao diện chính của tôi ...

đây là exmaple đơn giản ...

tôi tải index.cshtml của hành động HomeController Index như là một trang chính ..

trong index.cshtml tôi đang tạo ra một liên kết qua

@Html.ActionLink("load partial view","Load","Home") 

trong HomeController Tôi thêm một hành động mới có tên gọi

public PartialViewResult Load() 
{ 
    return PartialView("_LoadView"); 
} 

trong _LoadView.cshmtl Tôi chỉ có một

<div> 
    Welcome !! 
</div> 

NHƯNG, khi chạy dự án, index.cshtml render đầu tiên và chỉ cho tôi liên kết "Load Partial View" ... khi tôi nhấp vào nó đi đến instade trang mới của rendering tin nhắn chào mừng từ _LoadView.cshtml vào index.cshtml.

Điều gì có thể sai?

Lưu ý: Tôi không muốn tải một trang thông qua AJAX hoặc không muốn sử dụng Ajax.ActionLink

Trả lời

121

Nếu bạn muốn tải xem một phần trực tiếp bên trong giao diện chính, bạn có thể sử dụng Html.Action helper:

@Html.Action("Load", "Home") 

hoặc nếu bạn không muốn đi qua các hành động tải sử dụng hepler HtmlPartial:

@Html.Partial("_LoadView") 

Nếu bạn muốn sử dụng Ajax.ActionLink, thay thế của bạn Html.ActionLink với:

@Ajax.ActionLink(
    "load partial view", 
    "Load", 
    "Home", 
    new AjaxOptions { UpdateTargetId = "result" } 
) 

và tất nhiên bạn cần phải bao gồm một người giữ trong trang của bạn mà một phần sẽ được hiển thị:

<div id="result"></div> 

Cũng đừng quên bao gồm:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 

trong chế độ xem chính của bạn để cho phép Ajax.* người trợ giúp. Và chắc chắn rằng javascript không phô trương được kích hoạt trong web.config của bạn (nó phải được theo mặc định):

<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
+0

hoạt động tốt ... vậy có nghĩa là nếu tôi muốn sử dụng nó với @ Html.ActionLink goona của nó như một yêu cầu bình thường và mở chế độ xem ngang hàng trong trang mới? ... –

+1

@ patel.milanb, chính xác. Html.ActionLink hiển thị một anchor bình thường trong html mà chỉ cần thực hiện một yêu cầu GET đến url đã cho và nó chuyển hướng trình duyệt đến nó. Bởi vì bạn đã chỉ nó vào hành động Load mà chỉ trả về một phần, trình duyệt được chuyển hướng và hiển thị phần này. –

+0

thx .... có quan điểm của bạn .... rất hữu ích ... sẽ sớm đăng một truy vấn khác ... –

5

Nếu bạn làm điều đó với một @Html.ActionLink() sau đó tải các PartialView được xử lý như một yêu cầu bình thường khi nhấp chuột vào một anchor- phần tử, tức là tải trang mới với phản hồi của phương thức PartialViewResult.
Nếu bạn muốn tải nó theo đúng, thì bạn sử dụng @Html.RenderPartial("_LoadView") hoặc @Html.RenderAction("Load").
Nếu bạn muốn làm điều đó khi sử dụng tương tác (nghĩa là nhấp vào liên kết) thì bạn cần phải sử dụng AJAX ->@Ajax.ActionLink()

+0

giải pháp trên hoạt động tốt ... vì vậy điều đó có nghĩa là nếu tôi muốn sử dụng nó với @ Html.ActionLink hành động goona của nó như một yêu cầu bình thường và mở ra chế độ xem ngang hàng trong trang mới? chỉ muốn rõ ràng tâm trí của tôi với một phần xem ... –

15

Tôi đã có cùng một vấn đề giống như Leniel. Tôi đã thử các bản sửa lỗi được đề xuất ở đây và một tá địa điểm khác.Điều đó cuối cùng làm việc đối với tôi là chỉ đơn giản là thêm

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/jqueryval") 

để bố trí của tôi ...

+2

+1 lý do tại sao không ai upvoted bạn đánh bại tôi .. mà không có hai nhập khẩu, nó không hoạt động .. – Chookoos

+0

Tôi cũng dành nhiều giờ để đánh bại vấn đề này. Trong mẫu mvc4 mặc định của tôi cho "ứng dụng mvc cơ bản", tôi có @ Scripts.Render ("~/bundles/jquery"), nhưng không phải là @ Scripts.Render ("~/bundles/jqueryval"). Vì vậy, tôi chỉ thêm lượt xem thứ hai và một phần bắt đầu hiển thị trên cùng một trang thay vì trang mới. Cảm ơn bạn. – user808128

+0

ngay cả đối với tôi nó đã không hoạt động cho đến khi tôi nhập khẩu hai hàng nhập khẩu này. – Niraj

4

Đối với tôi đây làm việc sau khi tôi đã tải về AJAX thư viện Không phô trương qua NuGet:

Search and install via NuGet Packages: Microsoft.jQuery.Unobtrusive.Ajax 

Thần thêm vào xem các tham chiếu đến jquery và AJAX Unobtrusive:

@Scripts.Render("~/bundles/jquery") 
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"> </script> 

Tiếp theo Ajax ActionLinkdiv là chúng tôi muốn làm cho kết quả:

@Ajax.ActionLink(
    "Click Here to Load the Partial View", 
    "ActionName", 
    null, 
    new AjaxOptions { UpdateTargetId = "toUpdate" } 
) 

<div id="toUpdate"></div> 
+0

Tôi đã theo một hướng dẫn trên youtube để thực hiện điều này và tôi đã không cài đặt 'Microsoft.jQuery.Unobtrusive.Ajax'. Điều này mặc dù thực tế là tôi đã cài đặt jquery.unobstrusive-ajax.min.js. Cảm ơn bạn đã cứu tôi rất nhiều đau đầu. – Dev

1

Tweek nhỏ để trên

@Ajax.ActionLink(
    "Click Here to Load the Partial View", 
    "ActionName", 
    "ControlerName", 
    null, 
    new AjaxOptions { UpdateTargetId = "toUpdate" } 
) 

<div id="toUpdate"></div> 
1

RenderParital là tốt hơn để sử dụng cho hiệu suất.

{@Html.RenderPartial("_LoadView");} 
-1

Một điều cần phải nhận thức được - và tôi ngã hôi của NÀY ...

jquery.validate.unobtrusive.js 
jquery.validate.unobtrusive.min.js 

không giống nhau AS ...

jquery.unobtrusive-ajax.js 
jquery.unobtrusive-ajax.min.js 

tôi đọc "kín đáo" và giả sử tôi đã có thư viện chính xác - những thư viện AJAX được yêu cầu!

0

nếu bạn muốn để cư nội dung xem một phần của bạn bên trong cái nhìn của bạn, bạn có thể sử dụng

@Html.Partial("PartialViewName") 

hoặc

{@Html.RenderPartial("PartialViewName");} 

nếu bạn muốn thực hiện yêu cầu máy chủ và xử lý dữ liệu và sau đó trở về một phần hiển thị chế độ xem chính của bạn với dữ liệu đó, bạn có thể sử dụng

... 
    @Html.Action("Load", "Home") 
... 

public PartialViewResult Load() 
{ 
    return PartialView("_LoadView"); 
} 

nếu bạn muốn chúng tôi er để nhấp vào liên kết và sau đó điền dữ liệu của chế độ xem một phần bạn có thể sử dụng:

@Ajax.ActionLink(
    "Click Here to Load the Partial View", 
    "ActionName", 
    "ControlerName", 
    null, 
    new AjaxOptions { UpdateTargetId = "toUpdate" } 
)