Cześć!
Tworzę sobie własne HtmlHelper's coby ułatwić sobie życie.
//Render Label
public class Label
{
private string text;
private readonly HtmlHelper html;
public Label(HtmlHelper html)
{
this.html = html;
}
public Label Text(string text)
{
this.text = text;
return this;
}
public MvcHtmlString GetHtml()
{
TagBuilder label = new TagBuilder("label");
label.InnerHtml = text;
return MvcHtmlString.Create(label.ToString(TagRenderMode.Normal));
}
}
//HtmlHelper extension
public static Label MyLabel(this HtmlHelper html)
{
return new Label(html);
}
//Render Input
public class Input
{
private string id;
private readonly HtmlHelper html;
public Input(HtmlHelper html)
{
this.html = html;
}
public Input Id(string id)
{
this.id = id;
return this;
}
public MvcHtmlString GetHtml()
{
TagBuilder input = new TagBuilder("input");
input.MergeAttribute("id", id);
input.MergeAttribute("type", "text");
input.AddCssClass("form-control");
return MvcHtmlString.Create(input.ToString(TagRenderMode.SelfClosing));
}
}
//HtmlHelper extension
public static Input MyInput(this HtmlHelper html)
{
return new Input(html);
}
W widoku używam
@(Html.MyLabel()
.Text("My label")
.GetHtml())
@(Html.MyInput()
.Id("txt123")
.GetHtml())
i w efekcie dostaję
<label>My label</label>
<input type="text" class="form-control" id="txt123">
I teraz chciałbym móc utworzyć helpera, który korzystałby z powyższych klas i przy zapisie
@(Html.MyFormGroup()
.Label()
.Text("My label")
.Input()
.Id("txt123")
.GetHtml())
wygenerował mi
<div class="form-group">
<label>My label</label>
<input type="text" class="form-control" id="txt123">
</div>
Utworzyłem odpowiednią klasę
//Render Form Group
public class FormGroup
{
private string css;
private readonly HtmlHelper html;
public FormGroup(HtmlHelper html)
{
this.html = html;
}
public FormGroup Css(string css)
{
this.css = css;
return this;
}
public MvcHtmlString GetHtml()
{
TagBuilder divFormGroup = new TagBuilder("div");
if (css != null)
divFormGroup.AddCssClass(css.ToLower());
divFormGroup.AddCssClass("form-group");
divFormGroup.MergeAttribute("id", id);
return MvcHtmlString.Create(divFormGroup.ToString(TagRenderMode.Normal));
}
}
ale nie mam pomysłu jak dopisać do niej Label
i Input
żeby działało.
Ma ktoś pomysła?
Pozdr
rm