簡體   English   中英

我該如何通過@ <text> 擴展方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM