渲染局部视图而不创建ActionResult

时间:2015-06-01 11:43:16

标签: asp.net-mvc-4

这是我的控制器

public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult ShowPartial()
        {
            return PartialView("_View1");
        }
    }

这是我的索引视图

<script type="text/javascript">
    function myFunction() {
        $("#div1").load('@Url.Action("ShowPartial", "Home")');
    }
</script>
<div id="div1">
</div>
@section footerButton {
    <input type="button" id="button1" value="button" onclick="myFunction()" />
}

这是我的布局页面

<body>
    <div style="height: 10%; background-color: whitesmoke; text-align: center">
        Header
    </div>
    <div style="height: 80%; background-color: white; text-align: center">
        @RenderBody()
    </div>
    <div style="height: 10%; background-color: whitesmoke; text-align: center">
        @RenderSection("footerButton", false)
    </div>
</body>

我创建了一个部分视图页面,其中我写了一个单词“Hello”。 我完成了按钮点击的部分视图渲染。 我已经使用了一个名为ShowPartial的actionResult,你可以在上面看到它。 现在我的问题是我想要相同的输出而不创建Actionresult。 请帮忙。

3 个答案:

答案 0 :(得分:1)

如果返回String而不是ActionResult,则可以使用以下命令生成字符串。您可以选择将此方法放在基本控制器上,以便最大限度地重复使用。

public string RenderPartialViewToString(string viewName, object model)
{
    this.ViewData.Model = model;
    try
    {
        using (StringWriter sw = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(this.ControllerContext, viewName);
            ViewContext viewContext = new ViewContext(this.ControllerContext, viewResult.View, this.ViewData, this.TempData, sw);
            viewResult.View.Render(viewContext, sw);

            return sw.GetStringBuilder().ToString();
        }
    }
    catch (System.Exception ex)
    {
        return ex.ToString();
    }
}

然后,你可以从你的方法中调用它:

public String ShowPartial()
{
    return RenderPartialViewToString("_View1", null);
}

答案 1 :(得分:1)

你可以试试这个:

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

您也可以在视图中使用模型,并直接从调用部分模型的视图中传递它。

答案 2 :(得分:0)

您是否尝试过Html文件的绝对路径?

<script type="text/javascript">
    function myFunction() {
        $("#div1").load('~/Shared/Something/page.html');
    }
</script>

page.html必须只包含html和javascript代码...