【发布时间】:2011-06-28 13:38:51
【问题描述】:
我有一个局部的观点,我想成为通用的。根据this question,部分视图不能是通用的。所以我改为创建了一个 HtmlHelper 扩展来处理我想要类型安全的部分,然后将其余部分交给真正的局部视图。
通常我的助手在页面加载时被调用,效果很好,但有时我想通过 AJAX 添加一行或其他东西。发生这种情况时,控制器无法使用我的“部分视图”,因为它无权访问 HtmlHelper。
除了拥有object 类型模型的局部视图之外,我还能做些什么吗?
我正在使用 Razor,如果这很重要的话。
我正在做的事情的简化版本:
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,而帮助器在控制器中不可用。
【问题讨论】:
-
我不完全理解你的情况。您能否展示一下这个助手的外观以及您如何从您的视图中调用它?
-
@Darin:我添加了一个示例。可能有更好的方法来完成这与我的做法无关。
-
那么具体的问题是什么?你的代码看起来不错。您提到“控制器无法使用我的“部分视图”,因为它无法访问 HtmlHelper”,但不清楚您在 AJAX 案例中要做什么。
-
@marcind:我想在 AJAX 案例中调用这个确切的辅助函数。
-
我认为你可以有一个新的操作方法来调用单个项目的助手。这对你有用吗?
标签: asp.net-mvc asp.net-mvc-3 razor partial-views