2
これはMVCの原則とベストプラクティスに違反することを認識しています。オーチャードのリソースをHtmlHelperに登録することはできますか?
私は一組のカスタムアングルコンポーネントを用意しています。各コンポーネントには、オプションのパラメータがたくさんあり、それぞれに異なるリモートスタイルシートとjavascriptファイルが必要です。これらをHtmlHelperでレンダリングしたいのですが、手動で適切なリソースを使用する必要はありません。
私は、これはトリックを行うだろうと期待していたが、それは私がヘルパーのようなものとして、任意の形状を使用することができ
public static class HtmlExtensions
{
private static IResourceManager _resourceManager;
// Executed in the Activated method of an OrchardShellEvents implementation
public static void SetResourceManager(IResourceManager resourceManager)
{
_resourceManager = resourceManager;
}
public static MvcHtmlString Angular(this HtmlHelper helper, CustomAngularComponent component)
{
// Require the resources
var _styleRegister = new ResourceRegister(helper.ViewDataContainer, _resourceManager, "Style");
var _scriptRegister = new ResourceRegister(helper.ViewDataContainer, _resourceManager, "Script");
_styleRegister.Require(component.StyleSheet).AtHead();
if (!string.IsNullOrEmpty(component.Script))
{
_scriptRegister.Require(component.Script).AtFoot();
}
// Create tag
var tag = new TagBuilder(component.Tag);
tag.MergeAttributes(component.Parameters);
return new MvcHtmlString(tag.ToString(TagRenderMode.SelfClosing));
}
}
ない:
@Display(New.Angular(Model: new CustomAngularComponent(...)))
が、強く持つヘルパー型付きのパラメータはもっと良く感じられます。
てみ '「スタイル」' 'に「スタイル」'と '「スクリプト」'に '「スクリプト」' ... – ViRuSTriNiTy
@ViRuSTriNiTyはその方向に私を指してくれてありがとう。 'ResourceRegister'の深いところで、' 'stylesheet" 'と' 'script" 'キーが正しい基底パスを構築することを期待していることがわかりました。ファイルはまだページに含まれていません。おそらく、HtmlHelperからインクルードを含むシェイプを返す方法を理解する方が簡単かもしれません。 – Lawyerson