部分视图与模型在视图中与模型

时间:2015-03-08 09:35:02

标签: asp.net-mvc asp.net-mvc-partialview

你好可以在没有模型的View里面运行带有模型的PartialView,或者我必须创建包含部分视图模型的模型吗? 例如:

User have his site:
@{
    ViewBag.Title = "MyPanel";
}

<div class="jumbotron">
        <!--Right Menu-->
        <div id="RightMenu" class="col-md-10" style="max-height:550px; overflow-y:scroll;">
            @Html.Action("AllSongs","UserPanel")
        </div>
    </div>
</div>

我想渲染包含模型的PartialView AllSongs。

public PartialViewResult AllSongs() {
        var userId = (int)Session["Login"];
        var songs = context.Songs.Where(x => x.UserID.Equals(userId));
        return PartialView(songs);
    }

但是当代码进入这个方法时,我得到了这样的错误:

Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'

1 个答案:

答案 0 :(得分:0)

你可以这样做,但是这个动作将加载与你期望的不同。我想你会希望在正在发生的事情之外加载。如果是这种情况,您可以返回该部分的内容并将其放在元素中 - &gt; $('#MyDiv').html('@Model.AllSongsHtmlContnet');您可以在控制器中使用辅助函数返回类似的内容:

protected string RenderPartialViewToString(string viewName, object model)
{
    if (string.IsNullOrEmpty(viewName))
        viewName = ControllerContext.RouteData.GetRequiredString("action");

    ViewData.Model = model;

    using (StringWriter sw = new StringWriter())
    {
        ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);

        return sw.GetStringBuilder().ToString();
    }
}