PartialView为HtmlHelper?

时间:2012-03-20 13:23:02

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

好的..这里我们去...这个月里最奇怪,最令人困惑的问题:) 我想创建一个HtmlHelper,一些如何渲染html,但使用部分视图的模板,如何渲染html,所以更简单..我想做一个“正常”控制器和视图确实..获取一些数据,将其传递给视图,然后渲染html,但在这种情况下,我想将一些数据传递给局部视图,然后将返回的html作为字符串,然后返回来自HtmlHelper方法的html ...... 通过这种方式,我希望能够编写例如@ Html.HeadMenu,然后将返回头部菜单的html,但我也能够在任何时候无需重新编译就能够更改html ..因为它全部在部分视图中......我不必担心任何服务器端的东西..而且我也会从智能感知中获益,因为我的方法会出现在@Html中。

我希望你能理解这一点......因为它很难解释..

提前致谢!

3 个答案:

答案 0 :(得分:1)

Partial HTML扩展方法怎么样,听起来就像你想要实现的那样?

@{
var htmlString = Html.Partial("YourPartialViewName").ToString();
}

它也有一个重载,因此您可以将模型传递给局部视图:

@{
var htmlString = Html.Partial("YourPartialViewName", partialViewModel).ToString();
}

答案 1 :(得分:1)

您可能正在寻找Html.RenderAction(actionName, controllerName, routeValues)方法。

答案 2 :(得分:0)

我会这样做

定义您想要传递给htmlhelper的数据

public class HeadMenuViewModel
{
    public string SomeProperty {get;set;}
}

HeadMenuViewModel.cshtml

中定义名为Views/Shared/DisplayTemplates的视图
@model HeadMenuViewModel
<div>
 ////
</div>

从现在开始,您可以使用

显示数据
@Html.DisplayFor(model => model.HeadMenu)

你可以为它编写命名的快捷方式扩展

    using System.Web.Mvc.Html;
...
    public static MvcHtmlString HeadMenu<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
    {
       return helper.DisplayFor(expression);
    }

现在,每次需要时更改HeadMenuViewModel.cshtml