I would like setup a title for frame and my custom buttons with BeginEditFrame, but I can't set it up in last method,
public GlassEditFrame BeginEditFrame();
public GlassEditFrame BeginEditFrame(string dataSource);
public GlassEditFrame BeginEditFrame(string buttons, string dataSource);
public GlassEditFrame BeginEditFrame<T>(T model, string title = null, params Expression<Func<T, object>>[] fields) where T : class;
Is it any other way to set edit frame title ?
I ran into this same situation and ended up creating a derived EditFrame and custom Extension to support titles.
public static class HtmlHelperExtensions
{
/// <summary>
/// An extra extensions because the default ones are bugged or do not expose title
/// </summary>
/// <typeparam name="TModel"></typeparam>
/// <param name="htmlHelper"></param>
/// <param name="model"></param>
/// <param name="buttons"></param>
/// <param name="title"></param>
/// <returns></returns>
public static GlassEditFrame BeginEditFrame<TModel>(this HtmlHelper htmlHelper, TModel model, string buttons, string title = "") where TModel : BaseCommon
{
var output = new HtmlTextWriter(htmlHelper.ViewContext.Writer);
var editFrame = new EditFrame()
{
DataSource = model.Id.ToString(),
Buttons = buttons,
Title = title
};
editFrame.RenderFirstPart(output);
return new CustomGlassEditFrame(editFrame, htmlHelper.ViewContext.Writer);
}
}
/// <summary>
/// Added this fix because were unable to set the Title otherwise..
/// </summary>
public class CustomGlassEditFrame : GlassEditFrame
{
public CustomGlassEditFrame(string buttons, TextWriter writer, string dataSource = "") : base(buttons, writer, dataSource)
{
}
public CustomGlassEditFrame(EditFrame frame) : base(frame)
{
}
/// <summary>
/// Using HtmlHelperExtensions.BeginEditFrame(EditFrame) you will miss the writer in the RenderLastPart, this extra constructor passes the writer
/// </summary>
/// <param name="frame"></param>
/// <param name="writer"></param>
public CustomGlassEditFrame(EditFrame frame, TextWriter writer)
: base(frame.Buttons, writer, frame.DataSource)
{
}
}