![](/img/trans.png)
[英]How can I pass a void returning extension method to dynamic returning extension method?
[英]How can I pass @<text> for an extension method?
如何通過@<text></text>
作為擴展方法?
我創建了這個擴展類:
public class CustomPanel
{
public CustomPanel()
{
this.Fields = new List<string>();
}
private List<string> Fields { get; set; }
public void AddField(string format)
{
this.Fields.Add(format);
}
public MvcHtmlString GetHtml()
{
var sb = new StringBuilder();
foreach (var field in this.Fields)
sb.AppendFormat("{0} <br>", field);
return new MvcHtmlString(sb.ToString());
}
}
public static class PanelExtension
{
public static CustomPanel CreatePanel(this HtmlHelper html)
{
return new CustomPanel();
}
}
當我調用該方法時:
@{
var panel = @Html.CreatePanel();
}
panel.AddField(@<text>
@Html.LabelFor(model => model.BarCode)
@Html.CheckBoxFor(model => model.BarCode)
</text>)
發生以下錯誤:
在代碼塊的開頭,“ <”無效。 僅標識符,關鍵字,注釋,“(”和“ {”)有效。
我怎么解決這個問題?
謝謝。
我用一個更好的主意解決了這個問題。
我將表達式傳遞給方法,並在其中創建了html代碼。
public class CustomField
{
public CustomField(MvcHtmlString label, MvcHtmlString input)
{
this.Label = label;
this.Input = input;
}
public MvcHtmlString Label { get; private set; }
public MvcHtmlString Input { get; private set; }
public override string ToString()
{
return string.Format("{0}{1}", this.Label, this.Input);
}
}
public class CustomPanel<TModel>
{
public CustomPanel(HtmlHelper<TModel> html)
{
if (html == null) throw new ArgumentNullException("html");
this.Html = html;
this.Fields = new List<CustomField>();
}
private HtmlHelper<TModel> Html { get; set; }
private List<CustomField> Fields { get; set; }
public void AddField<TValue>(Expression<Func<TModel, TValue>> expression)
{
this.Fields.Add(new CustomField(this.Html.LabelFor<TModel, TValue>(expression), this.Html.TextBoxFor<TModel, TValue>(expression)));
}
public MvcHtmlString GetHtml()
{
var sb = new StringBuilder();
foreach (var field in this.Fields)
sb.AppendFormat("{0} <br>", field);
return new MvcHtmlString(sb.ToString());
}
}
public static class PanelExtension
{
public static CustomPanel<TModel> CreatePanel<TModel>(this HtmlHelper<TModel> html)
{
return new CustomPanel<TModel>(html);
}
}
視圖:
@{
var panel = @Html.CreatePanel();
panel.AddField(model => model.Reference);
panel.AddField(model => model.Barcode);
}
@panel.GetHtml()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.