如何编写呈现局部视图的HtmlHelper扩展方法?

时间:2011-07-06 19:44:30

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

我需要创建一个HtmlHelper扩展名来呈现自动填充功能。像这样:

@Html.AutoCompleteFor(x => x.CustomerId);

问题是Html.RenderPartial(...)返回void,因此我的AutoCompleteFor方法也必须无效。但是Razor不会让它编译,因为只有当X返回一个Object时,@ Html.X才会编译。

我知道我可以通过调用它来绕过这个问题,而不是:

@{ Html.AutoCompleteFor(x => x.CustomerId); }

但这会使我的代码看起来与@Html.EditorFor

不一致

我需要从我的HtmlHelper

中返回一个PartialView

一些注意事项:

  • 我知道你可能认为这会以某种方式破坏MVC模式,但MVC本身就是这样做的。 Html.EditorFor将尝试查找视图并将其返回。
  • 我只是想这样做,因为我需要foreign-key属性默认使用jQuery-AutoComplete。我无法告诉MVC将我的模板用于外键属性。

1 个答案:

答案 0 :(得分:1)

您应该调用Html.Partial,它会返回HelperResult个对象,而不是直接写入页面。
然后,您可以将HelperResult返回给来电者。

从技术上讲,你也可以return null,但那是一个非常愚蠢的想法。