我对 Web 应用程序开发很陌生,我想我会从最近的技术开始,所以我试图立即学习 asp.net as-well 作为 MVC 框架。对于 MVC 专业人士来说,这可能是一个非常简单的问题。
我的问题是部分视图是否应该有关联的操作,如果是这样,只要普通页面在局部视图上使用RenderPartial(),是否会调用此操作?
RenderPartial()
虽然您可以使用返回部分视图的操作,但不需要操作来呈现部分视图。 RenderPartial 获取局部视图,并使用给定的模型和视图数据(如果提供)将其渲染到当前(父)视图中。
如果您使用 AJAX 到 load/reload 页面的一部分,您可能需要一个返回局部视图的操作。在这种情况下,不希望返回完整视图,因为您只想重新加载部分页面。在这种情况下,您可以让操作返回与页面该部分对应的局部视图。
标准机制
在普通视图中使用局部视图(无需任何操作)
...some html... <% Html.RenderPartial( "Partial", Model.PartialModel ); %> ...more html..
Ajax 机制
通过 AJAX 重新加载页面的一部分(注意部分在初始页面加载时呈现为内联)
...some html... <div id="partial"> <% Html.RenderPartial( "Partial", Model.PartialModel ); %> </div> ...more html... <script type="text/javascript"> $(function() { $('#someButton').click( function() { $.ajax({ url: '/controller/action', data: ...some data for action..., dataType: 'html', success: function(data) { $('#partial').html(data); }, ... }); }); }); </script>
AJAX 控制器
public ActionResult Action(...) { var model = ... ... if (Request.IsAjaxRequest()) { return PartialView( "Partial", model.PartialModel ); } else { return View( model ); } }
接受的答案是完全正确的,但我想补充一点,你可以使用 jQuery load 加载你的局部视图。如果您不想考虑并发性,则需要较少的配置。
$("#Your-Container").load("/controller/action/id");
答案是不。但有时你需要在局部视图后面进行一些控制器操作。然后,您可以创建一个返回局部视图的 actionMethod。可以在另一个视图中调用此 actionMethod:
@Html.Action("StockWarningsPartial", "Stores")
动作方法可能如下所示:
public ActionResult StockWarningsPartial() { .... return View("StockWarningsPartial", warnings); }
并且视图'StockWarningsPartial.cshtml'以以下内容开头:
@{ Layout = null; }
使它不再渲染你的周围布局。
我能够用这种逻辑实现类似的东西。
在.cshtml 内
@Html.Action("ActionMethodName", "ControllerName");
在控制器内
[Route("some-action")] public ActionResult ActionMethodName() { var someModel = new SomeModel(); ... return PartialView("SomeView.cshtml", someModel); }
就是这样。
如果需要将值从.cshtml 传递给 action 方法,则可以。
4 回答
虽然您可以使用返回部分视图的操作,但不需要操作来呈现部分视图。 RenderPartial 获取局部视图,并使用给定的模型和视图数据(如果提供)将其渲染到当前(父)视图中。
如果您使用 AJAX 到 load/reload 页面的一部分,您可能需要一个返回局部视图的操作。在这种情况下,不希望返回完整视图,因为您只想重新加载部分页面。在这种情况下,您可以让操作返回与页面该部分对应的局部视图。
标准机制
在普通视图中使用局部视图(无需任何操作)
Ajax 机制
通过 AJAX 重新加载页面的一部分(注意部分在初始页面加载时呈现为内联)
AJAX 控制器
接受的答案是完全正确的,但我想补充一点,你可以使用 jQuery load 加载你的局部视图。如果您不想考虑并发性,则需要较少的配置。
答案是不。但有时你需要在局部视图后面进行一些控制器操作。然后,您可以创建一个返回局部视图的 actionMethod。可以在另一个视图中调用此 actionMethod:
动作方法可能如下所示:
并且视图'StockWarningsPartial.cshtml'以以下内容开头:
使它不再渲染你的周围布局。
我能够用这种逻辑实现类似的东西。
在.cshtml 内
在控制器内
就是这样。
如果需要将值从.cshtml 传递给 action 方法,则可以。