首页 文章

asp.net MVC 局部视图控制器动作

提问于
浏览
76

我对 Web 应用程序开发很陌生,我想我会从最近的技术开始,所以我试图立即学习 asp.net as-well 作为 MVC 框架。对于 MVC 专业人士来说,这可能是一个非常简单的问题。

我的问题是部分视图是否应该有关联的操作,如果是这样,只要普通页面在局部视图上使用RenderPartial(),是否会调用此操作?

4 回答

  • 134

    虽然您可以使用返回部分视图的操作,但不需要操作来呈现部分视图。 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 );
         }
    }
    
  • 3

    接受的答案是完全正确的,但我想补充一点,你可以使用 jQuery load 加载你的局部视图。如果您不想考虑并发性,则需要较少的配置。

    $("#Your-Container").load("/controller/action/id");
    
  • 2

    答案是不。但有时你需要在局部视图后面进行一些控制器操作。然后,您可以创建一个返回局部视图的 actionMethod。可以在另一个视图中调用此 actionMethod:

    @Html.Action("StockWarningsPartial", "Stores")
    

    动作方法可能如下所示:

    public ActionResult StockWarningsPartial()
    {
          ....              
          return View("StockWarningsPartial", warnings);
    
    }
    

    并且视图'StockWarningsPartial.cshtml'以以下内容开头:

    @{
        Layout = null;
    }
    

    使它不再渲染你的周围布局。

  • 1

    我能够用这种逻辑实现类似的东西。

    在.cshtml 内

    @Html.Action("ActionMethodName", "ControllerName");
    

    在控制器内

    [Route("some-action")]
    public ActionResult ActionMethodName()
    {
        var someModel = new SomeModel();
        ...
        return PartialView("SomeView.cshtml", someModel);
    }
    

    就是这样。

    如果需要将值从.cshtml 传递给 action 方法,则可以。

相关问题