return Views by PartialView method

本文关键字:method PartialView by Views return | 更新日期: 2023-09-27 18:01:18

我想使用ajax来阻止刷新我的页面,为此我想返回通过ajax调用上控制器PartialView方法视图

问题是:

  1. View返回为PartialView是一种好方法吗
  2. 我应该如何在Controller中设置PartialView方法中的视图路径

例如,对于Views/BasicInfo/Index路径中的_Index视图,我尝试CCD_ 5,PartialView("~/Views/BasicInfo/_Index.chtml");PartialView("BasicInfo/_Index");,并在视图中未找到错误

编辑

如何指定视图名称到PartialView方法中,如果视图位于共享文件夹之外的文件夹和相关视图文件夹之外。例如,我的控制器的名称是controller1,而我的视图在此路径中Views/BasicInfo/_Index

return Views by PartialView method

你应该有这个

  • MyController

    • ActionResult->索引
    • ActionResult->IndexPartial
  • 视图

    • 我的
      • Index.chtml(视图(
      • IndexPartial.cshtml(PartialView(

其中:

Index.chtml作为完整视图将呈现带有传递模型的部分视图(为什么这样?以防止代码重复(

@model YourModelType
@{
    ViewBag.Title = "View Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@Html.Partial("IndexPartial", Model)

IndexPartial.cshtml是部分视图,类似于

@model YourModelType
<h2>Some Title</h2>
 <div>
<h4>YourModel</h4>
<hr />
<dl class="dl-horizontal">
    <dt>
        @Html.DisplayNameFor(model => model.Property1)
    </dt>
    <dd>
        @Html.DisplayFor(model => model.Property1)
    </dd>
    <dt>
        @Html.DisplayNameFor(model => model.Property2)
    </dt>
    <dd>
        @Html.DisplayFor(model => model.Property2)
    </dd>
</dl>

现在,当您想要完整视图时,请使用MyController/Index,而当您想要部分视图时,您可以使用MyControlller/IndexPartial 获得它

或者,您可以在操作中使用参数来指定输出:

public ActionResult GetMyView(bool? partial)
        {
           var model  = something;
           if (partial != null && partial)
             { 
                return PartialView("MyViewPartial", model)
             }
            return View("MyView", model);
        }

调用partial=yourHost/controller/GetMyView?partial=真实

现在回到您的问题,是的,您可以将部分视图返回为视图,反之亦然。但是您将面临通过ajax将html附加到页面的问题(不完整或重载的html(。

您可以使用:

public PartialViewResult ActionMethodName() 
{
      return PartialView("_Index.chtml");
}

public ActionResult ActionMethodName() 
{
      return PartialView("_Index.chtml");
}
  1. 没有限制,也不认为这是一种糟糕的做法。

  2. 你的问题的PartialView("~/Views/BasicInfo/_Index.chtml")部分有一个打字错误。

    你应该写return PartialView("~/Views/BasicInfo/_Index.cshtml")

是的。最佳做法是在不加载页面的情况下以部分视图的形式返回。

 return PartialView("YourPartialView", model)

或者你可以使用绝对路径

return  PartialView("~/Views/AnotherFolder/YourPartialView", model)

这就是我对您的问题的理解:您有一个名为Controller1的控制器,它具有ActionResult someMethod((,另一个控制器BasicInfo具有PartialView BasicInfo_Index,并且您希望从someMethod(

您可以在someMethod((中使用以下代码来获取BasicInfo控制器的局部视图:

var DesirePartialView = ViewEngines.Engines.FindPartialView(ControllerContext, "BasicInfo_Index");
        return PartialView(DesirePartialView.View);

或者,您可以使用RedirectToAction((在BasicInfo控制器中重新强制执行操作方法,该方法返回指定的局部视图

您在控制器中从ajax调用的方法的返回类型是什么?应该是这样的:

public PartialViewResult LoadPartialView() 
{
      return PartialView("~/Views/BasicInfo/_Index.chtml");
}