これがHtmlHelperの設計を通じてコピーできるものなのか、それともRazor自体に組み込まれた特別なものなのかについて興味があります。
Fluent Interfaceアプローチを使用して生のHTMLを作成するのをやめるために、Knockout用の小さなラッパーライブラリを作成しています。ただし、次のようなことができない限り、非常に面倒になります。
@using(Html.KoDiv().ForEach("MyArray").Visible("!Busy"))
{
<some html here>
}
私が見たのと同じような外観の唯一のものは次のとおりです。
@using(Html.BeginForm("Action"))
{
<some html here>
}
質問:どうすればこの構文を実行できますか?または、私が考えていなかった他の軽量構文アプローチはありますか?
彼らのアプローチではステートメントを使用する必要があるため、彼らは応答に直接書き込んでいるか、おそらくHtmlHelper.Raw()を呼び出して、Dispose()
メソッドに終了タグをレンダリングしていると思いました。using
ただし、どちらもこれまで機能していません。何か案は?ありがとう!
サンプルコード:
public class KoElement : IHtmlString, IDisposable
{
protected StringBuilder m_sb;
protected TagBuilder m_tagBuilder;
protected List<string> m_events;
public KoElement(TagBuilder tb, HtmlHelper html = null)
{
m_tagBuilder = tb;
m_events = new List<string>();
}
public string ToHtmlString()
{
m_tagBuilder.Attributes.Add("data-bind", string.Join(", ", m_events));
return m_tagBuilder.ToString(TagRenderMode.StartTag);
}
public void Dispose()
{
HttpContext.Current.Response.Write("</" + m_tagBuilder.TagName + ">");
}
public KoElement Visible(string expression)
{
if (!string.IsNullOrEmpty(expression))
m_events.Add(string.Format("visible: {0}", expression));
return this;
}
public KoElement ForEach(string expression)
{
if (!string.IsNullOrEmpty(expression))
m_events.Add(string.Format("foreach: {0}", expression));
return this;
}
}