2012-03-20 53 views
0

好吧..这里我们去..最奇怪和最令人困惑的月份问题:) 我想创建一个HtmlHelper,一些如何呈现HTML,但使用部分视图为它的模板应该如何呈现HTML ,所以把它更简单..我想做一个完全相同的“正常”控制器和视图..获取一些数据,传递给视图,然后呈现HTML,但在这种情况下,我想将某些数据传递给部分视图,然后将返回的html作为字符串获取,然后从HtmlHelper方法返回该HTML ... 以这种方式,我希望能够编写实例@ Html.HeadMenu,然后将返回headmenu的HTML,但我也可以在任何时候不重新编译能够改变的HTML ..因为它的全部在一个局部视图..我不会担心任何服务器端的东西。 。我也会得到好处因为我的方法将会出现在@Html中,所以这是智能感知。部分视图为HtmlHelper?

我希望你能理解this..since同类很难解释..

提前感谢!

回答

1

Partial HTML扩展方法怎么样,听起来像你正在努力实现的权利?

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

它还具有过载,这样就可以通过一个模型的局部视图:

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

你也不得不打电话或者ToHtmlString()或toString()方法来获取一个实际的字符串(该方法返回一个MvcHtmlString。 – 2012-03-20 13:29:24

+0

@JustinNiessner好的,赶紧,谢谢!更新了我的答案。 – 2012-03-20 13:30:30

+0

可能工作..但如果我想这样做: 命名空间PMT.Core.Helpers { 公共类MenuHelper { 公共静态字符串HeadMenu(此的HtmlHelper助手) { 回报Html.Partial(” YourPartialViewName“,partialViewModel).ToHtmlString(); }} } 可能不是最好的例子,但不适猜测你的想法:) – Inx 2012-03-20 13:35:55

1

你可能会寻找Html.RenderAction(actionName, controllerName, routeValues)方法。

0

我会做这样

定义你想象的数据传递给你的HtmlHelper

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

Views/Shared/DisplayTemplates

@model HeadMenuViewModel 
<div> 
//// 
</div> 

定义视图命名为HeadMenuViewModel.cshtml从现在开始,你可以使用

显示您的数据
@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每次你需要