more hidden iframe love
2007-11-14 @ 12:26#
new rule - all my XHTML templates will include a hidden <iframe> at the bottom. like this:
<iframe name="hidden-iframe" id="hidden-iframe" style="display:none;" marginheight="0" marginwidth="0" scrolling="no" frameborder="0"></iframe>
i can now use standard HTML POST forms w/ a target='hidden-iframe' to allow posting data to the server without navigating away from the current page.
i also use a template in my server scripts to responding to these 'iframe-posts' by squirting some javascript into the target iframe that can pop-up a dialog with results. like this:
// emit a small html page that pops a dialog
public void EmitClientAlert(string code, string message)
{
EmitClientAlert(code, message, true);
}
public void EmitClientAlert(string code, string message, bool showCode)
{
string output = "<html>";
output += "<head>";
output += "<script type='text/javascript'>\n";
output += "if('{@code}'=='200')\n";
output += "alert(\"{@message}\");\n";
output += "else\n";
if(showCode==true)
output += "alert(\"ERROR: {@code}\\n\\n{@message}\");\n";
else
output += "alert(\"ERROR: \\n{@message}\");\n";
output += "<" + "/" + "script>\n";
output += "</head><body></body></html>";
output = output.Replace("{@code}", code);
output = output.Replace("{@message}", message.Replace(@"\",@"\\"));
// complete the response
HttpContext.Current.Response.ContentType = "text/html";
HttpContext.Current.Response.Write(output);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Close();
}
a *very handy* pattern!