Asp.net mvc ASP.NET MVC HtmlHelper扩展方法,仅当其包含内容时才进行换行

Asp.net mvc ASP.NET MVC HtmlHelper扩展方法,仅当其包含内容时才进行换行,asp.net-mvc,html-helper,Asp.net Mvc,Html Helper,我正在制作一个可配置表单,由管理员选择显示哪些输入。输入由字段集包装 我想制作一个HtmlHelper,仅当它至少有一个输入字段的内容时才生成字段集,以防止出现这种情况 <fieldset id="Name"> <legend>Name</legend> <input type="text" placeholer="Forename"></input> <input type="text" placeholer=

我正在制作一个可配置表单,由管理员选择显示哪些输入。输入由字段集包装

我想制作一个HtmlHelper,仅当它至少有一个输入字段的内容时才生成字段集,以防止出现这种情况

<fieldset id="Name">
   <legend>Name</legend>
   <input type="text" placeholer="Forename"></input>
   <input type="text" placeholer="Surname"></input>
</fieldset>


<fieldset id="Address">
   <legend>Address</legend>
</fieldset>

我最近也有类似的情况。如果外部元素(从using元素生成的元素)没有任何项,我试图在这里添加一些No Items文本。这是一个未经测试的修改版本,我最终做了什么,但如果你仍然在寻找答案,它应该让你接近

 public class FieldSetHelper: IDisposable
{
    private readonly HtmlHelper _htmlHelper;
    private readonly string _fieldSetId;
    private readonly string _legendId;
    private readonly string _legendText;

    public FieldSetHelper(HtmlHelper htmlHelper, string fieldSetId, string legendId, string legendText)
    {
        _htmlHelper = htmlHelper;
        _fieldSetId = fieldSetId;
        _legendId = legendId;
        _legendText = legendText;

        _htmlHelper.ViewContext.Writer = new StringWriter();

        OpenFieldSet();
        AddLegend();
    }


    private string BuildOpenFieldSetString(){
        string id = string.IsNullOrWhiteSpace(_fieldSetId) ? string.Empty : string.Format(" id=\"{0}\"", _fieldSetId);
        return string.Format("<fieldset" + id + ">");
    }

    private void OpenFieldSet()
    {
        _htmlHelper.ViewContext.Writer.WriteLine(BuildOpenFieldSetString());
    }

    private void CloseFieldSet()
    {
        _htmlHelper.ViewContext.Writer.WriteLine(string.Format("</fieldset>"));
    }

    private void AddLegend()
    {
        string id = string.IsNullOrWhiteSpace(_legendId) ? string.Empty : string.Format(" id=\"{0}\"", _legendId);
        _htmlHelper.ViewContext.Writer.WriteLine("<legend"+id+">");
        _htmlHelper.ViewContext.Writer.WriteLine(_legendText);
        _htmlHelper.ViewContext.Writer.WriteLine("</legend>");
    }

    public void Dispose()
    {
        var htmlString = _htmlHelper.ViewContext.Writer.ToString();
        var index = htmlString.Trim().LastIndexOf(BuildOpenFieldSetString().Trim());
        if(html.IndexOf("<input", index) == -1){
            _htmlHelper.ViewContext.Writer = new StringWriter();
            _htmlHelper.ViewContext.Writer.WriteLine(html.SubString(0,index));
        }else{
            CloseFieldSet();
        }
    }
using (Html.BeginFieldSet("Address", null, "Address"))
{
   @Html.EditorFor(m => m.Address, new {Model.VisibleInputFields})
}
 public class FieldSetHelper: IDisposable
{
    private readonly HtmlHelper _htmlHelper;
    private readonly string _fieldSetId;
    private readonly string _legendId;
    private readonly string _legendText;

    public FieldSetHelper(HtmlHelper htmlHelper, string fieldSetId, string legendId, string legendText)
    {
        _htmlHelper = htmlHelper;
        _fieldSetId = fieldSetId;
        _legendId = legendId;
        _legendText = legendText;

        _htmlHelper.ViewContext.Writer = new StringWriter();

        OpenFieldSet();
        AddLegend();
    }


    private string BuildOpenFieldSetString(){
        string id = string.IsNullOrWhiteSpace(_fieldSetId) ? string.Empty : string.Format(" id=\"{0}\"", _fieldSetId);
        return string.Format("<fieldset" + id + ">");
    }

    private void OpenFieldSet()
    {
        _htmlHelper.ViewContext.Writer.WriteLine(BuildOpenFieldSetString());
    }

    private void CloseFieldSet()
    {
        _htmlHelper.ViewContext.Writer.WriteLine(string.Format("</fieldset>"));
    }

    private void AddLegend()
    {
        string id = string.IsNullOrWhiteSpace(_legendId) ? string.Empty : string.Format(" id=\"{0}\"", _legendId);
        _htmlHelper.ViewContext.Writer.WriteLine("<legend"+id+">");
        _htmlHelper.ViewContext.Writer.WriteLine(_legendText);
        _htmlHelper.ViewContext.Writer.WriteLine("</legend>");
    }

    public void Dispose()
    {
        var htmlString = _htmlHelper.ViewContext.Writer.ToString();
        var index = htmlString.Trim().LastIndexOf(BuildOpenFieldSetString().Trim());
        if(html.IndexOf("<input", index) == -1){
            _htmlHelper.ViewContext.Writer = new StringWriter();
            _htmlHelper.ViewContext.Writer.WriteLine(html.SubString(0,index));
        }else{
            CloseFieldSet();
        }
    }