Asp.net mvc ASP.NET MVC HtmlHelper扩展方法,仅当其包含内容时才进行换行
我正在制作一个可配置表单,由管理员选择显示哪些输入。输入由字段集包装 我想制作一个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=
<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();
}
}