我有一个局部视图,我想通用。根据this question,部分视图不能是通用的。所以我反而做了一个HtmlHelper扩展,它处理我想要的类型安全的部分,然后将其余的部分交给真正的局部视图。ASP.NET MVC通用局部视图模式
通常我的助手是在页面加载时调用的,它工作正常,但有时我想通过AJAX添加一行或其他东西。发生这种情况时,控制器无法使用我的“局部视图”,因为它无法访问HtmlHelper。
除了用object
类型的模型进行局部视图外,有什么我可以做的吗?
我使用剃刀,如果这很重要。
的我在做什么的简化版本:
public static MvcHtmlString DoStuff<T>(this HtmlHelper html, IEnumerable<T> data,
Func<T, ViewModelType> StronglyTypedFn, string PartialName)
{
// the pre- and post-processing for the partial view is complex enough I'd like
// to encapsulate it. But I want the encapsulation to include the safety
// benefits that generics give.
var mappedData = data.Select(StronglyTypedFn);
string htmlData = "";
foreach(var model in mappedData){
htmlData += html.Partial(PartialName, model);
}
htmlData += "some boilerplate footer html";
return htmlData;
}
我意识到,在这个例子中,我有,它似乎毫无意义的具有助手的局部视图之外的代码,这样几行,但在我真实的例子是比较复杂的。
现在,在ajax调用中,我想返回Html.DoStuff()
。但我不能,因为这需要访问HtmlHelper,并且帮助程序在控制器内不可用。
我不完全了解您的情况。你能否展示这位助手是怎样的以及你如何从你的视线中调用它? – 2011-02-16 18:15:05
@Darin:我添加了一个例子。可能有更好的方法来完成这与我如何完成它无关。 – Xodarap 2011-02-16 18:25:43