У меня есть частичное представление, что я хочу быть универсальным.Согласно этому вопросу частичные представления не могут быть общими.Поэтому я вместо этого сделал расширение 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, а помощник недоступен внутри контроллера.