通过PartialView方法返回视图

时间:2015-07-07 11:52:38

标签: c# asp.net-mvc

  

我想使用ajax来防止刷新我的页面,为此我想要返回   ajax调用中控制器 PartialView 方法观看次数

问题是:

  1. View作为PartialView
  2. 返回是一种好方法
  3. 如何在PartialView Controller方法中设置观看路径?
  4. 例如,对于 Views / BasicInfo / _Index 路径中的_Index视图,我试试         PartialView("~/Views/BasicInfo/_Index");PartialView("~/Views/BasicInfo/_Index.chtml");PartialView("BasicInfo/_Index"); ,并获得错误,因为找不到视图

    修改

    如果视图位于Shared文件夹之外的文件夹中且超出相关视图文件夹,则如何将指定的视图名称添加到PartialView方法中。例如,我的控制器名称是 controller1 ,我的视图位于此路径 Views / BasicInfo / _Index

6 个答案:

答案 0 :(得分:5)

你应该有这个

  • myController的

    • ActionResult - >索引
    • ActionResult - > IndexPartial
  • 浏览

      • Index.cshtml(查看)
      • IndexPartial.cshtml(PartialView)

其中:

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

@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>

现在,当您想要完整的View使用MyController / Index时,如果您想要部分视图,可以使用MyController / 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 = true

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

答案 1 :(得分:5)

你可以使用:

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

OR

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

答案 2 :(得分:3)

  1. 没有限制,也不考虑不良做法。
  2. 您在问题的var xml_doc = jQuery.parseXML(xmlString); 部分输入了错字。

    您应该写PartialView("~/Views/BasicInfo/_Index.chtml")

答案 3 :(得分:1)

是的。 。它是在没有页面加载的情况下作为部分视图返回的最佳实践。

 return PartialView("YourPartialView", model)

或者你可以使用绝对路径

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

答案 4 :(得分:0)

这是我的问题所理解的: 你有一个控制器名称Controller1,它有ActionResult someMethod()和另一个控制器BasicInfo,它有一个PartialView BasicInfo_Index,你想从someMethod()返回BasicInfo_Index局部视图:

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

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

或者您可以使用RedirectToAction()在BasicInfo控制器中重新设置动作方法,该控制器返回指定的部分视图

答案 5 :(得分:0)

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

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