<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Dan&#039;s Green Shoes</title>
	<atom:link href="http://dansgreenshoes.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://dansgreenshoes.com</link>
	<description>Got my green shoes on!</description>
	<lastBuildDate>Thu, 16 May 2013 11:54:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='dansgreenshoes.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/5fc0853e4cda74bb9390be67661809da?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Dan&#039;s Green Shoes</title>
		<link>http://dansgreenshoes.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://dansgreenshoes.com/osd.xml" title="Dan&#039;s Green Shoes" />
	<atom:link rel='hub' href='http://dansgreenshoes.com/?pushpress=hub'/>
		<item>
		<title>HTML JavaScript Data Grids</title>
		<link>http://dansgreenshoes.com/2013/04/01/html-javascript-data-grids/</link>
		<comments>http://dansgreenshoes.com/2013/04/01/html-javascript-data-grids/#comments</comments>
		<pubDate>Mon, 01 Apr 2013 13:02:34 +0000</pubDate>
		<dc:creator>Dan Hickman</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ASP.net MVC]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">https://dansgreenshoes.wordpress.com/?p=481</guid>
		<description><![CDATA[Line-of-Business applications tend to have data grids and ProModel products are no exception.  Our users have come to expect some rich behaviors that are not inherit in your basic HTML table element.  ProModel recently ranked the most popular HTML/JavaScript data &#8230; <a href="http://dansgreenshoes.com/2013/04/01/html-javascript-data-grids/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=481&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Line-of-Business applications tend to have data grids and <a href="https://www.ProModel.com/" target="_blank">ProModel</a> products are no exception.  Our users have come to expect some rich behaviors that are not inherit in your basic HTML table element.  <a href="https://www.ProModel.com/" target="_blank">ProModel</a> recently ranked the most popular HTML/JavaScript data grids out there right now.  Below you will find our summary.  Please note that many &#8220;Yes&#8221; and/or &#8221;No&#8221; values are hyperlinks into an example if we could find one.</p>
<p>We chose jxqGrid.  If you see a data grid we missed, please let me know which one.</p>
<h1>Feature Rankings</h1>
<h2>Got To Have It Features</h2>
<ol>
<li>Sorting</li>
<li>Inline Editing</li>
<li>Column Resizing</li>
<li>Cell Selection</li>
<li>Cell copy/paste</li>
<li>Range copy/paste &#8220;Update&#8221;</li>
</ol>
<table width="529" border="0" cellspacing="0" cellpadding="0">
<col width="123" />
<col width="53" />
<col width="70" />
<col width="60" />
<col width="67" />
<col span="2" width="78" />
<tbody>
<tr>
<td width="123" height="38">GRID</td>
<td width="53">Sorting</td>
<td width="70">Inline Editing</td>
<td width="60">Column Resizing</td>
<td width="67">Cell Selection</td>
<td width="78">Cell copy/paste</td>
<td width="78">Range copy/paste</td>
</tr>
<tr>
<td height="58"><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)">jqxGrid</a></td>
<td><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)#demos/jqxgrid/sorting.htm">Yes</a></td>
<td><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)#demos/jqxgrid/cellediting.htm">Yes</a></td>
<td><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)#demos/jqxgrid/columnsresizing.htm">Yes</a></td>
<td><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)#demos/jqxgrid/cellsselection.htm">Yes</a></td>
<td><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)#demos/jqxgrid/cellsselection.htm">Yes</a></td>
<td><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)#demos/jqxgrid/cellsselection.htm">Yes</a></td>
</tr>
<tr>
<td height="38"><a href="http://www.trirand.com/blog/?page_id=5">jqGrid</a></td>
<td>Yes</td>
<td width="70">Yes   (but not great)</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="38"><a href="https://github.com/mleibman/SlickGrid/wiki">SlickGrid</a></td>
<td><a href="http://mleibman.github.com/SlickGrid/examples/example-multi-column-sort.html">Yes</a></td>
<td width="70"><a href="http://mleibman.github.com/SlickGrid/examples/example3-editing.html">Yes   (but not great)</a></td>
<td><a href="http://mleibman.github.com/SlickGrid/examples/example3-editing.html">Yes</a></td>
<td><a href="http://mleibman.github.com/SlickGrid/examples/example3-editing.html">Yes</a></td>
<td><a href="http://labs.nereo.com/SlickGrid/examples/example-excel-compatible-spreadsheet.html">Yes</a></td>
<td><a href="http://labs.nereo.com/SlickGrid/examples/example-excel-compatible-spreadsheet.html">Yes</a></td>
</tr>
<tr>
<td height="38"><a href="http://paramquery.com/">ParameterQuery</a></td>
<td><a href="http://paramquery.com/demos/sorting_remote">Yes</a></td>
<td width="70"><a href="http://paramquery.com/demos/editing">Yes (but not great)</a></td>
<td><a href="http://paramquery.com/demos/resizable_columns">Yes</a></td>
<td><a href="http://paramquery.com/demos/selection_cell">Yes</a></td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="38"><a href="http://handsontable.com/">Handontable</a></td>
<td><a href="http://handsontable.com/demo/sorting.html">Yes</a></td>
<td><a href="http://handsontable.com/index.html">Yes</a></td>
<td width="60"><a href="http://handsontable.com/demo/column_resize.html">Yes (but buggy)</a></td>
<td><a href="http://handsontable.com/index.html">Yes</a></td>
<td><a href="http://handsontable.com/index.html">Yes</a></td>
<td><a href="http://handsontable.com/index.html">Yes</a></td>
</tr>
<tr>
<td height="38"><a href="http://wijmo.com/demo/explore/?widget=Grid&amp;sample=Overview">wijmo (ComponentOne)</a></td>
<td><a href="http://wijmo.com/demo/explore/?widget=Grid&amp;sample=Sorting">Yes</a></td>
<td><a href="http://wijmo.com/demo/explore/?widget=Grid&amp;sample=Editing">Yes</a></td>
<td><a href="http://wijmo.com/demo/explore/?widget=Grid&amp;sample=Column%20resizing">Yes</a></td>
<td><a href="http://wijmo.com/demo/explore/?widget=Grid&amp;sample=Selection">Yes</a></td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="77"><a href="http://demos.kendoui.com/web/grid/index.html">KendoUI (Telerik)</a></td>
<td><a href="http://demos.kendoui.com/web/grid/sorting.html">Yes</a></td>
<td><a href="http://demos.kendoui.com/web/grid/editing-inline.html">Partial</a></td>
<td><a href="http://demos.kendoui.com/web/grid/column-resizing.html">Yes</a></td>
<td><a href="http://demos.kendoui.com/web/grid/selection.html">Yes</a></td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="58"><a href="http://ericmbarnard.github.com/KoGrid/#/overview">koGrid</a></td>
<td><a href="http://ericmbarnard.github.com/KoGrid/#/examples">Yes</a></td>
<td>No</td>
<td><a href="http://ericmbarnard.github.com/KoGrid/#/examples">Yes</a></td>
<td>No</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="38"><a href="http://dhtmlx.com/docs/products/dhtmlxGrid/features.shtml#excell">dhtmlxGrid</a></td>
<td><a href="http://dhtmlx.com/docs/products/dhtmlxGrid/samples/16_rows_columns_manipulations/23_pro_sort_image.html">Yes</a></td>
<td><a href="http://dhtmlx.com/docs/products/dhtmlxGrid/samples/15_navigation/02_pro_keymap_excel.html">Yes</a></td>
<td><a href="http://dhtmlx.com/docs/products/dhtmlxGrid/samples/16_rows_columns_manipulations/06_pro_column_size.html">Yes</a></td>
<td><a href="http://dhtmlx.com/docs/products/dhtmlxGrid/samples/15_navigation/02_pro_keymap_excel.html">Yes</a></td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="19"><a href="http://www.jtable.org/">jTable</a></td>
<td><a href="http://www.jtable.org/Demo/PagingAndSorting">Yes</a></td>
<td>No</td>
<td><a href="http://www.jtable.org/Demo/ColumnResizing">Yes</a></td>
<td>No</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="38"><a href="http://www.sencha.com/products/extjs/">Sencha Ext JS</a></td>
<td><a href="http://docs.sencha.com/ext-js/4-2/extjs-build/examples/grid-filtering/grid-filter-local.html">Yes</a></td>
<td><a href="http://docs.sencha.com/ext-js/4-2/extjs-build/examples/build/KitchenSink/ext-theme-neptune/#cell-editing">Yes</a></td>
<td><a href="http://docs.sencha.com/ext-js/4-2/extjs-build/examples/build/KitchenSink/ext-theme-neptune/#cell-editing">Yes</a></td>
<td><a href="http://docs.sencha.com/ext-js/4-2/extjs-build/examples/build/KitchenSink/ext-theme-neptune/#cell-editing">Partial</a></td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="19"><a href="http://www.infragistics.com/products/jquery/">IgniteUI (Infragistics)</a></td>
<td><a href="http://www.infragistics.com/products/jquery/sample/grid/all-features-enabled">Yes</a></td>
<td><a href="http://www.infragistics.com/products/jquery/sample/grid/editing">Partial</a></td>
<td><a href="http://www.infragistics.com/products/jquery/sample/grid/all-features-enabled">Yes</a></td>
<td><a href="http://www.infragistics.com/products/jquery/sample/grid/cell-selection">Yes</a></td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="19"><a href="http://www.syncfusion.com/products/aspnet-mvc/controls">Syncfusion</a></td>
<td><a href="http://mvc.syncfusion.com/demos/ui/grid/Sorting/ServerSorting">Yes</a></td>
<td><a href="http://mvc.syncfusion.com/demos/ui/grid/Editing/ServerCRUD">Yes</a></td>
<td><a href="http://mvc.syncfusion.com/demos/ui/grid/RowsandColumns/Resize">Yes</a></td>
<td>No</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="20"><a href="http://www.intersoftpt.com/WebGrid/">WebGrid (Intersoft Solutions)</a></td>
<td><a href="http://live.intersoftpt.com/Content.aspx?url=cs/WebGrid/Sorting.aspx&amp;path=/WebGrid/User%20Interactions">Yes</a></td>
<td><a href="http://live.intersoftpt.com/Content.aspx?url=cs/WebGrid/Enterprise.aspx&amp;path=/WebGrid/User%20Interactions">Yes</a></td>
<td>Yes</td>
<td><a href="http://live.intersoftpt.com/Content.aspx?url=cs/WebGrid/Enterprise.aspx&amp;path=/WebGrid/User%20Interactions">Yes</a></td>
<td>No</td>
<td>No</td>
</tr>
</tbody>
</table>
<h2>Love It Features</h2>
<ol>
<li>Row Selection</li>
<li>Filtering</li>
<li>Flood Fill</li>
<li>Virtualizing</li>
<li>Range copy/paste &#8220;Adds&#8221;</li>
<li>Knockout/Data Integration</li>
</ol>
<table width="537" border="0" cellspacing="0" cellpadding="0">
<col width="123" />
<col width="67" />
<col width="106" />
<col width="43" />
<col width="80" />
<col width="118" />
<tbody>
<tr>
<td width="123" height="38">GRID</td>
<td width="67">Row Selection</td>
<td width="106">Filtering</td>
<td width="43">Flood Fill</td>
<td width="80">Virtualizing</td>
<td width="118">Knockout/Data   Integration</td>
</tr>
<tr>
<td height="58"><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)">jqxGrid</a></td>
<td><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)#demos/jqxgrid/rowselection.htm">Yes</a></td>
<td><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)#demos/jqxgrid/filtering.htm">Yes</a></td>
<td>No</td>
<td><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)#demos/jqxgrid/virtualscrolling.htm">Partial</a></td>
<td width="118"><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxknockout/index.htm?(classic)#demos/jqxknockout/grid.htm">Can   bind to pretty much anything..   Can   use KO as well</a></td>
</tr>
<tr>
<td height="38"><a href="http://www.trirand.com/blog/?page_id=5">jqGrid</a></td>
<td>Yes</td>
<td width="106">Yes   &#8211; Search</td>
<td>No</td>
<td>Yes</td>
<td width="118">MVC</td>
</tr>
<tr>
<td height="38"><a href="https://github.com/mleibman/SlickGrid/wiki">SlickGrid</a></td>
<td><a href="http://labs.nereo.com/SlickGrid/examples/example-excel-compatible-spreadsheet.html">No</a></td>
<td><a href="http://labs.nereo.com/SlickGrid/examples/example-excel-compatible-spreadsheet.html">Yes &#8211; Search</a></td>
<td><a href="http://labs.nereo.com/SlickGrid/examples/example-excel-compatible-spreadsheet.html">Yes</a></td>
<td><a href="http://labs.nereo.com/SlickGrid/examples/example-excel-compatible-spreadsheet.html">Yes</a></td>
<td width="118"><a href="http://labs.nereo.com/SlickGrid/examples/example-excel-compatible-spreadsheet.html">Seems to be kinda   &#8220;hard-wired&#8221;</a></td>
</tr>
<tr>
<td height="38"><a href="http://paramquery.com/">ParameterQuery</a></td>
<td><a href="http://paramquery.com/demos/selection_row">Yes</a></td>
<td><a href="http://paramquery.com/demos/search">Yes &#8211; Search</a></td>
<td>No</td>
<td><a href="http://paramquery.com/demos/infinite">Yes</a></td>
<td width="118">Doesn&#8217;t   support KO</td>
</tr>
<tr>
<td height="38"><a href="http://handsontable.com/">Handontable</a></td>
<td>No</td>
<td>No</td>
<td><a href="http://handsontable.com/index.html">Yes</a></td>
<td>No</td>
<td width="118">Not   sure about KO</td>
</tr>
<tr>
<td height="38"><a href="http://wijmo.com/demo/explore/?widget=Grid&amp;sample=Overview">wijmo   (ComponentOne)</a></td>
<td><a href="http://wijmo.com/demo/explore/?widget=Grid&amp;sample=Selection">Yes</a></td>
<td width="106"><a href="http://wijmo.com/demo/explore/?widget=Grid&amp;sample=Filtering">Yes &#8211;   Filter Row</a></td>
<td>No</td>
<td>No</td>
<td width="118">Seems   you can use KO</td>
</tr>
<tr>
<td height="77"><a href="http://demos.kendoui.com/web/grid/index.html">KendoUI (Telerik)</a></td>
<td><a href="http://demos.kendoui.com/web/grid/selection.html">Yes</a></td>
<td><a href="http://demos.kendoui.com/web/grid/filter-menu-customization.html">Yes</a></td>
<td>No</td>
<td><a href="http://demos.kendoui.com/web/grid/virtualization-local-data.html">Yes</a></td>
<td width="118">They   kinda have their own framework and server wrappers</td>
</tr>
<tr>
<td height="58"><a href="http://ericmbarnard.github.com/KoGrid/#/overview">koGrid</a></td>
<td><a href="http://ericmbarnard.github.com/KoGrid/#/examples">Yes</a></td>
<td>No</td>
<td>No</td>
<td>No</td>
<td width="118">Seems   you can use KO</td>
</tr>
<tr>
<td height="38"><a href="http://dhtmlx.com/docs/products/dhtmlxGrid/features.shtml#excell">dhtmlxGrid</a></td>
<td><a href="http://dhtmlx.com/docs/products/dhtmlxGrid/samples/16_rows_columns_manipulations/20_pro_multi_select.html">Yes</a></td>
<td><a href="http://dhtmlx.com/docs/products/dhtmlxGrid/samples/08_filtering/02_pro_filter_combo.html">Yes   &#8211; Search</a></td>
<td>No</td>
<td><a href="http://dhtmlx.com/docs/products/dhtmlxGrid/samples/14_loading_big_datasets/03_grid_dyn.html">Yes</a></td>
<td width="118">Doesn&#8217;t   support KO</td>
</tr>
<tr>
<td height="19"><a href="http://www.jtable.org/">jTable</a></td>
<td><a href="http://www.jtable.org/Demo/SelectingRows">Yes</a></td>
<td><a href="http://www.jtable.org/Demo/Filtering">Yes &#8211; Search</a></td>
<td>No</td>
<td>No</td>
<td width="118">Not   sure about KO</td>
</tr>
<tr>
<td height="38"><a href="http://www.sencha.com/products/extjs/">Sencha Ext JS</a></td>
<td><a href="http://docs.sencha.com/ext-js/4-2/extjs-build/examples/grid/binding-with-classes.html">Yes</a></td>
<td><a href="http://docs.sencha.com/ext-js/4-2/extjs-build/examples/grid-filtering/grid-filter-local.html">Yes</a></td>
<td>No</td>
<td><a href="http://docs.sencha.com/ext-js/4-2/extjs-build/examples/grid/buffer-grid.html">Yes</a></td>
<td width="118">Not   sure about KO</td>
</tr>
<tr>
<td height="19"><a href="http://www.infragistics.com/products/jquery/">IgniteUI (Infragistics)</a></td>
<td><a href="http://www.infragistics.com/products/jquery/sample/grid/row-selection">Yes</a></td>
<td><a href="http://www.infragistics.com/products/jquery/sample/grid/all-features-enabled">Yes</a></td>
<td>No</td>
<td><a href="http://www.infragistics.com/products/jquery/sample/grid/continuous-virtualization">Yes</a></td>
<td width="118"><a href="http://www.infragistics.com/products/jquery/sample/grid/grid-knockoutjs-integration">KO   support</a></td>
</tr>
<tr>
<td height="19"><a href="http://www.syncfusion.com/products/aspnet-mvc/controls">Syncfusion</a></td>
<td><a href="http://mvc.syncfusion.com/demos/ui/grid/Editing/ServerCRUD">Yes</a></td>
<td><a href="http://mvc.syncfusion.com/demos/ui/grid/Filtering/ServerFiltering">Yes</a></td>
<td>No</td>
<td><a href="http://mvc.syncfusion.com/demos/ui/grid/ProductShowCase/VirtualScrolling">Yes</a></td>
<td width="118">Not   sure about KO</td>
</tr>
<tr>
<td height="20"><a href="http://www.intersoftpt.com/WebGrid/">WebGrid (Intersoft Solutions)</a></td>
<td><a href="http://live.intersoftpt.com/Content.aspx?url=cs/WebGrid/TemplatedCell.aspx&amp;path=/WebGrid/Grid%20Layout%20Mode">Yes</a></td>
<td><a href="http://live.intersoftpt.com/Content.aspx?url=cs/WebGrid/Filtering.aspx&amp;path=/WebGrid/User%20Interactions">Yes</a></td>
<td>No</td>
<td><a href="http://live.intersoftpt.com/Content.aspx?url=cs/WebGrid/ClientBinding_Transactions.aspx&amp;path=/WebGrid/ClientBinding">Yes</a></td>
<td width="118">Not   sure about KO</td>
</tr>
</tbody>
</table>
<h2>Like It Features</h2>
<ol>
<li>Moving Rows</li>
<li>Frozen Columns</li>
<li>Col Selection</li>
<li>Grouping</li>
<li>Merged Column Headers</li>
<li>Direct Breeze.js integration</li>
<li>Column Reorder</li>
</ol>
<table width="590" border="0" cellspacing="0" cellpadding="0">
<col width="123" />
<col width="62" />
<col width="67" />
<col width="120" />
<col width="58" />
<col width="48" />
<col width="112" />
<tbody>
<tr>
<td width="123" height="38">GRID</td>
<td width="62">Frozen Columns</td>
<td width="67">Grouping</td>
<td width="120">Merged Column   Headers</td>
<td width="58">Column Reorder</td>
<td width="48">Excel Like</td>
<td width="112">Direct Breeze.js   integration</td>
</tr>
<tr>
<td height="58"><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)">jqxGrid</a></td>
<td><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)#demos/jqxgrid/pinnedcolumns.htm">Yes</a></td>
<td><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)#demos/jqxgrid/grouping.htm">Yes</a></td>
<td>No</td>
<td><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)#demos/jqxgrid/reordercolumns.htm">Yes</a></td>
<td><a href="http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm?(classic)#demos/jqxgrid/spreadsheet.htm">Yes</a></td>
<td width="112">No (refer to   notes for further links)</td>
</tr>
<tr>
<td height="38"><a href="http://www.trirand.com/blog/?page_id=5">jqGrid</a></td>
<td>Yes</td>
<td width="67">Yes   &#8211; but not user</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="38"><a href="https://github.com/mleibman/SlickGrid/wiki">SlickGrid</a></td>
<td><a href="http://labs.nereo.com/SlickGrid/examples/example-excel-compatible-spreadsheet.html">No</a></td>
<td><a href="http://labs.nereo.com/SlickGrid/examples/example-excel-compatible-spreadsheet.html">No</a></td>
<td><a href="http://labs.nereo.com/SlickGrid/examples/example-excel-compatible-spreadsheet.html">No</a></td>
<td><a href="http://labs.nereo.com/SlickGrid/examples/example-excel-compatible-spreadsheet.html">Yes</a></td>
<td><a href="http://mleibman.github.com/SlickGrid/examples/example-spreadsheet.html">Partial</a></td>
<td>No</td>
</tr>
<tr>
<td height="38"><a href="http://paramquery.com/">ParameterQuery</a></td>
<td><a href="http://paramquery.com/demos/freeze_columns">Yes</a></td>
<td>No</td>
<td><a href="http://paramquery.com/demos/group">Yes</a></td>
<td>No</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="38"><a href="http://handsontable.com/">Handontable</a></td>
<td>No</td>
<td>No</td>
<td>No</td>
<td width="58"><a href="http://handsontable.com/demo/column_resize.html">Yes (but buggy)</a></td>
<td><a href="http://handsontable.com/index.html">Yes</a></td>
<td>No</td>
</tr>
<tr>
<td height="38"><a href="http://wijmo.com/demo/explore/?widget=Grid&amp;sample=Overview">wijmo   (ComponentOne)</a></td>
<td>No</td>
<td><a href="http://wijmo.com/demo/explore/?widget=Grid&amp;sample=Group%20Area">Yes</a></td>
<td><a href="http://wijmo.com/demo/explore/?widget=Grid&amp;sample=Bands">Yes</a></td>
<td><a href="http://wijmo.com/demo/explore/?widget=Grid&amp;sample=Column%20moving">Yes</a></td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="77"><a href="http://demos.kendoui.com/web/grid/index.html">KendoUI (Telerik)</a></td>
<td>No</td>
<td>No</td>
<td>No</td>
<td><a href="http://demos.kendoui.com/web/grid/column-reordering.html">Yes</a></td>
<td>No</td>
<td><a href="http://www.kendoui.com/blogs/teamblog/posts/13-02-21/breeze_js_and_the_kendo_ui_datasource.aspx">Yes,   but a hack</a></td>
</tr>
<tr>
<td height="58"><a href="http://ericmbarnard.github.com/KoGrid/#/overview">koGrid</a></td>
<td>No</td>
<td><a href="http://ericmbarnard.github.com/KoGrid/#/examples">Yes</a></td>
<td>No</td>
<td><a href="http://ericmbarnard.github.com/KoGrid/#/examples">Yes</a></td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="38"><a href="http://dhtmlx.com/docs/products/dhtmlxGrid/features.shtml#excell">dhtmlxGrid</a></td>
<td><a href="http://dhtmlx.com/docs/products/dhtmlxGrid/samples/09_frozen_columns/01_pro_grid_split.html">Yes</a></td>
<td>No</td>
<td>No</td>
<td><a href="http://dhtmlx.com/docs/products/dhtmlxGrid/samples/16_rows_columns_manipulations/13_pro_grid_moveCol.html">Yes</a></td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="19"><a href="http://www.jtable.org/">jTable</a></td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="38"><a href="http://www.sencha.com/products/extjs/">Sencha Ext JS</a></td>
<td><a href="http://docs.sencha.com/ext-js/4-2/extjs-build/examples/build/KitchenSink/ext-theme-neptune/#locking-grid">Yes</a></td>
<td width="67"><a href="http://docs.sencha.com/ext-js/4-2/extjs-build/examples/build/KitchenSink/ext-theme-neptune/#grouped-grid">Yes   &#8211; (but buggy)</a></td>
<td><a href="http://docs.sencha.com/ext-js/4-2/extjs-build/examples/build/KitchenSink/ext-theme-neptune/#grouped-header-grid">Yes</a></td>
<td><a href="http://docs.sencha.com/ext-js/4-2/extjs-build/examples/build/KitchenSink/ext-theme-neptune/#cell-editing">Yes</a></td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="19"><a href="http://www.infragistics.com/products/jquery/">IgniteUI (Infragistics)</a></td>
<td>No</td>
<td><a href="http://www.infragistics.com/products/jquery/sample/grid/all-features-enabled">Yes</a></td>
<td><a href="http://www.infragistics.com/products/jquery/sample/grid/all-features-enabled">Yes</a></td>
<td><a href="http://www.infragistics.com/products/jquery/sample/grid/all-features-enabled">Yes</a></td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="19"><a href="http://www.syncfusion.com/products/aspnet-mvc/controls">Syncfusion</a></td>
<td><a href="http://mvc.syncfusion.com/demos/ui/grid/RowsandColumns/FrozenRowsandColumns">Yes</a></td>
<td><a href="http://mvc.syncfusion.com/demos/ui/grid/Grouping/ServerGrouping">Yes</a></td>
<td><a href="http://mvc.syncfusion.com/demos/ui/grid/RowsandColumns/StackedHeader">Yes</a></td>
<td><a href="http://mvc.syncfusion.com/demos/ui/grid/RowsandColumns/AllowDragDrop">Yes</a></td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td height="20"><a href="http://www.intersoftpt.com/WebGrid/">WebGrid (Intersoft Solutions)</a></td>
<td><a href="http://live.intersoftpt.com/Content.aspx?url=cs/WebGrid/ColumnFreezing.aspx&amp;path=/WebGrid/User%20Interactions">Yes</a></td>
<td><a href="http://live.intersoftpt.com/Content.aspx?url=cs/WebGrid/Grouping.aspx&amp;path=/WebGrid/User%20Interactions">Yes</a></td>
<td><a href="http://live.intersoftpt.com/Content.aspx?url=cs/WebGrid/BatchUpdate_AutomaticObjectUpdate.aspx&amp;path=/WebGrid/SmartBatchUpdate">Yes</a></td>
<td><a href="http://live.intersoftpt.com/Content.aspx?url=cs/WebGrid/Enterprise.aspx&amp;path=/WebGrid/User%20Interactions">Yes</a></td>
<td>No</td>
<td>No</td>
</tr>
</tbody>
</table>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dansgreenshoes.wordpress.com/481/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dansgreenshoes.wordpress.com/481/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=481&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dansgreenshoes.com/2013/04/01/html-javascript-data-grids/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0ef7f2673d2fcbe074e834864d72aa83?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">danhickman</media:title>
		</media:content>
	</item>
		<item>
		<title>Calling into your database on Silverlight Application_Exit</title>
		<link>http://dansgreenshoes.com/2013/03/19/calling-into-your-database-on-silverlight-application_exit/</link>
		<comments>http://dansgreenshoes.com/2013/03/19/calling-into-your-database-on-silverlight-application_exit/#comments</comments>
		<pubDate>Tue, 19 Mar 2013 16:57:36 +0000</pubDate>
		<dc:creator>Dan Hickman</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[CodeProject]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">https://dansgreenshoes.wordpress.com/?p=468</guid>
		<description><![CDATA[My team has developed several Line of Business applications using Silverlight.  Most but not all have at least 3 if not all of the following feature requests: Allow users to be signed into the LOB more than once. Users like &#8230; <a href="http://dansgreenshoes.com/2013/03/19/calling-into-your-database-on-silverlight-application_exit/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=468&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>My team has developed several Line of Business applications using Silverlight.  Most but not all have at least 3 if not all of the following feature requests:</p>
<ul>
<li>Allow users to be signed into the LOB more than once. Users like having more than 1 browser tab or even more than 1 browser type with the LOB app loaded simultaneously.</li>
<li>Ability to differentiate between a user in Tab1 versus Tab2 for purposes of concurrency, etc.</li>
<li>Limit the number of simultaneous sessions a specific user can have. 1 is a valid constraint.</li>
<li>Automatically log out a user instance after X seconds a.k.a session time out</li>
<li>Gather user information such as browser type/version, screen resolution, IP, etc</li>
<li># of concurrent distinct users logged in over time.</li>
<li># of concurrent users logged in over time total.</li>
<li>Max or average simultaneous sessions by users.</li>
</ul>
<p>All of these are good feature requests for any Line of Business Application. Thinking through it, these features share an implementation detail that requires the LOB to track each signed in user <b>instance</b>.</p>
<h4>Implementation Plan</h4>
<p>Here was the plan.</p>
<ol>
<li>Create a new database table called AppInstance. This table will contain a list of all the active users in the system.</li>
<li>Create a new database table called ArchivedAppInstance. This table contains all previously logged in users.</li>
<li>Whenever a user logs in, add a row to the AppInstance table that records the UserId, timestamp of when that user logged in and any other information your LOB might want to know.</li>
<li>Whenever a user logs out, archive the #3 AppInstance row to ArchivedAppInstance table noting the logged out timestamp.</li>
</ol>
<p>The information in these 2 new tables enable the implementation of the features above. Conceptually this is very simple. In fact, 1 through 3 above are easy. #4 it turns out, in Silverlight was not as straight forward as one might think. Why? First, there are multiple ways the application can be exited such as clicking the LOB “Log Out” button, closing the browser directly, navigating away from the LOB web page or, heaven forbid, a browser crash. Except for crashing, the Silverlight application’s Exit event is raised but if you try to perform some backend action like calling a web service it won’t go through since <b>the thread required to make the service call itself is gone</b>.</p>
<p>I worked on a team to solve this. My colleague <a href="http://www.linkedin.com/pub/tammy-adkins-mcclellan/19/936/b93">Tammy McClellan</a> recently documented our approach for other product owners internally and I thought I would share on my blog. In addition, Tammy created an extremely small and simple sample application with our implementation. You can find the<a href="https://skydrive.live.com/redir?resid=EDAFB4DBECFEE2EA!9172&amp;authkey=!AMOsZK73quaQU-o"> code here</a>.</p>
<h4><span id="more-468"></span>Example App Explanation</h4>
<p>Running the sample app will show 2 buttons. “Insert AppInstance, Delete using WebService” and “Insert AppInstance, Delete using WCF”. Think of the buttons as logging into your Silverlight LOB application. Clicking a button adds a row to the AppInstance table that records the UserId, timestamp of when that user logged in, screen resolution, IP, browser type etc.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/03/clip_image002.jpg"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border:0;" title="clip_image002" alt="clip_image002" src="http://dansgreenshoes.files.wordpress.com/2013/03/clip_image002_thumb.jpg?w=612&#038;h=72" width="612" height="72" border="0" /></a></p>
<h4>Insert AppInstance, Delete using WCF Button</h4>
<p>The sample app uses Entity Framework and creating the AppInstance is pretty standard code. I won’t go into much detail, please see the code as needed. The key here is setting the App.OnExitUseWCF to true.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/03/clip_image004.jpg"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border:0;" title="clip_image004" alt="clip_image004" src="http://dansgreenshoes.files.wordpress.com/2013/03/clip_image004_thumb.jpg?w=612&#038;h=323" width="612" height="323" border="0" /></a></p>
<h4>Insert AppInstance, Delete using WebService button</h4>
<p>The key here is setting the App.OnExitUseWCF to false.</p>
<h4>Shutting Down the Application</h4>
<p>Shutting down the sample application will trigger the Silverlight Application_Exit event shown below.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/03/clip_image006.jpg"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border:0;" title="clip_image006" alt="clip_image006" src="http://dansgreenshoes.files.wordpress.com/2013/03/clip_image006_thumb.jpg?w=612&#038;h=169" width="612" height="169" border="0" /></a></p>
<p>Depending on which button you used, will determine the technique used to archive the AppInstance. If you use the “Insert AppInstance, Delete using WebService” button, the AppInstance is correctly archived. If you use the “Insert AppInstance, Delete using WCF” button the AppInstance does NOT get archived AND no error is thrown. The call to the WCF service silently killed.</p>
<p>In the “WebService” AppInstance archive process, the key to it working is to send an XMLHttpRequest to call a web service. The reason we use XMLHttpRequest is that it will execute even after the browser is closed since the JavaScript method attached to the body onunload event in the default.aspx will be called when the browser exits.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/03/clip_image008.jpg"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border:0;" title="clip_image008" alt="clip_image008" src="http://dansgreenshoes.files.wordpress.com/2013/03/clip_image008_thumb.jpg?w=612&#038;h=77" width="612" height="77" border="0" /></a></p>
<p>Please check out the XmlHttpRequest.cs class in the <a href="https://skydrive.live.com/redir?resid=EDAFB4DBECFEE2EA!9172&amp;authkey=!AMOsZK73quaQU-o">source code</a>.</p>
<h4>Valuable Relevant Resources</h4>
<p>· <a href="http://danielvaughan.orpius.com/post/Calling-Web-Services-from-Silverlight-after-the-Browser-has-closed.aspx">http://danielvaughan.orpius.com/post/Calling-Web-Services-from-Silverlight-after-the-Browser-has-closed.aspx</a></p>
<p>· <a href="http://emantranet.com/silverlight/?p=52">http://emantranet.com/silverlight/?p=52</a></p>
<p>· <a href="http://social.msdn.microsoft.com/Forums/en-US/silverlightbugs/thread/80fa9324-06ef-4784-80ba-57e701316877/">http://social.msdn.microsoft.com/Forums/en-US/silverlightbugs/thread/80fa9324-06ef-4784-80ba-57e701316877/</a></p>
<p>· <a href="http://stackoverflow.com/questions/3660560/how-to-detect-a-browser-refresh-from-silverlight-4">http://stackoverflow.com/questions/3660560/how-to-detect-a-browser-refresh-from-silverlight-4</a></p>
<p>· <a href="http://social.msdn.microsoft.com/Forums/en-US/silverlightweb/thread/39818d02-91fe-4bbc-ba9b-6efa142d08b5/">http://social.msdn.microsoft.com/Forums/en-US/silverlightweb/thread/39818d02-91fe-4bbc-ba9b-6efa142d08b5/</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dansgreenshoes.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dansgreenshoes.wordpress.com/468/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=468&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dansgreenshoes.com/2013/03/19/calling-into-your-database-on-silverlight-application_exit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0ef7f2673d2fcbe074e834864d72aa83?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">danhickman</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/03/clip_image002_thumb.jpg" medium="image">
			<media:title type="html">clip_image002</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/03/clip_image004_thumb.jpg" medium="image">
			<media:title type="html">clip_image004</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/03/clip_image006_thumb.jpg" medium="image">
			<media:title type="html">clip_image006</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/03/clip_image008_thumb.jpg" medium="image">
			<media:title type="html">clip_image008</media:title>
		</media:content>
	</item>
		<item>
		<title>Technology in movies/shows that make you cringe&#8230;</title>
		<link>http://dansgreenshoes.com/2013/03/12/technology-in-moviesshows-that-make-you-cringe/</link>
		<comments>http://dansgreenshoes.com/2013/03/12/technology-in-moviesshows-that-make-you-cringe/#comments</comments>
		<pubDate>Tue, 12 Mar 2013 14:22:52 +0000</pubDate>
		<dc:creator>Dan Hickman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dansgreenshoes.com/?p=456</guid>
		<description><![CDATA[Scott Hanselman&#8217;s blog is one of my favorites.  His post today I found hilarious.  Scott has collected small clips of various famous movies and tv shows showcasing &#8220;technology&#8221;.  I literally cringed at a couple of them. Technology fails in film &#8230; <a href="http://dansgreenshoes.com/2013/03/12/technology-in-moviesshows-that-make-you-cringe/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=456&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Scott Hanselman&#8217;s blog is one of my favorites.  His post today I found hilarious.  Scott has collected small clips of various famous movies and tv shows showcasing &#8220;technology&#8221;.  I literally cringed at a couple of them.</p>
<h2><a href="http://www.hanselman.com/blog/TechnologyFailsInFilmAreTheNewWilhelmScream.aspx" rel="bookmark">Technology fails in film are the new Wilhelm Scream</a></h2>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dansgreenshoes.wordpress.com/456/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dansgreenshoes.wordpress.com/456/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=456&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dansgreenshoes.com/2013/03/12/technology-in-moviesshows-that-make-you-cringe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0ef7f2673d2fcbe074e834864d72aa83?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">danhickman</media:title>
		</media:content>
	</item>
		<item>
		<title>Using your &#8220;User&#8221; table with MVC4 Internet Template</title>
		<link>http://dansgreenshoes.com/2013/03/10/mvc4usertable/</link>
		<comments>http://dansgreenshoes.com/2013/03/10/mvc4usertable/#comments</comments>
		<pubDate>Sun, 10 Mar 2013 19:42:25 +0000</pubDate>
		<dc:creator>Dan Hickman</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[CodeProject]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Gamification]]></category>
		<category><![CDATA[ASP.net MVC]]></category>
		<category><![CDATA[ASP.NET Web API]]></category>
		<category><![CDATA[gamification]]></category>

		<guid isPermaLink="false">https://dansgreenshoes.wordpress.com/?p=367</guid>
		<description><![CDATA[The MVC4 Internet template assumes that it will be adding a user table called “UserProfile” to your database.  What I think a high percentage of developers would want is to use their domain model’s “user” entity and have SimpleMembership just &#8230; <a href="http://dansgreenshoes.com/2013/03/10/mvc4usertable/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=367&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>The MVC4 Internet template assumes that it will be adding a user table called “UserProfile” to your database.  What I think a high percentage of developers would want is to use <strong>their</strong> domain model’s “user” entity and have SimpleMembership just manage the passwords.  In this blog post I will demonstrate how I did this and welcome alternative suggestions.<br />
I recommend you first understand the authentication process provided by the MVC 4 Internet template.  There are 2 fantastic posts you should read first.</p>
<ol>
<li><a href="http://geekswithblogs.net/Aligned/archive/2012/08/30/mvc-4-authentication.aspx" target="_blank">MVC 4 Authentication</a></li>
<li><a href="http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx" target="_blank">SimpleMembership, Membership Providers, Universal Providers and the new ASP.NET 4.5 Web Forms and ASP.NET MVC 4 templates</a></li>
</ol>
<p>In addition, please check out <a href="http://odetocode.com/blogs/all" target="_blank">Scott Allen’s</a> excellent Pluralsight course called “<a href="http://pluralsight.com/training/courses/TableOfContents?courseName=mvc4-building&amp;highlight=scott-allen_mvc4-building-m4-data-i*4#mvc4-building-m4-data-i" target="_blank">Building Applications with ASP.NET MVC 4</a>”.</p>
<h1>MVC 4 Internet Template with pre-existing Domain Model</h1>
<p>Create a new ASP.NET MVC 4 <strong>Internet</strong> Application and name it “SimpleMemberExample”</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border-width:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb.png?w=556&#038;h=374" width="556" height="374" border="0" /></a></p>
<h2>Custom Domain Model/Database</h2>
<p>The first thing I want to do is create the custom domain model/database.  In the “Model” directory, lets add a class that represents our custom “User” table.  Lets call this custom user entity “Administrator” as seen here:</p>
<div id="codeSnippetWrapper" style="overflow:auto;cursor:text;font-size:8pt;font-family:'Courier New', courier, monospace;direction:ltr;text-align:left;margin:20px 0 10px;line-height:12pt;max-height:200px;width:97.5%;background-color:#f4f4f4;padding:4px;border:silver 1px solid;">
<pre id="codeSnippet" style="overflow:visible;font-size:8pt;font-family:'Courier New', courier, monospace;color:black;direction:ltr;text-align:left;margin:0;line-height:12pt;width:100%;background-color:#f4f4f4;border-style:none;padding:0;"><span style="color:#0000ff;">namespace</span> SimpleMembershipExample.Models
{
    <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> Administrator
    {
        <span style="color:#0000ff;">public</span> Administrator(){}
        <span style="color:#cc6633;">#region</span> Fields and Properties
        <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">int</span> Id { get; set; }
        <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">string</span> Name { get; set; }
        <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">string</span> Email { get; set; }
        <span style="color:#cc6633;">#endregion</span>
    }
}</pre>
</div>
<p>(I was unable to figure out how my user table’s unique identifier could use a Guid.  I think the unique identifier of your custom user entity/table must be an int to use SimpleMembership.  anyone know?)</p>
<p>Lets add a custom DbContext as shown here to the root of the project.</p>
<div id="codeSnippetWrapper" style="overflow:auto;cursor:text;font-size:8pt;font-family:'Courier New', courier, monospace;direction:ltr;text-align:left;margin:20px 0 10px;line-height:12pt;max-height:200px;width:97.5%;background-color:#f4f4f4;padding:4px;border:silver 1px solid;">
<pre id="codeSnippet" style="overflow:visible;font-size:8pt;font-family:'Courier New', courier, monospace;color:black;direction:ltr;text-align:left;margin:0;line-height:12pt;width:100%;background-color:#f4f4f4;border-style:none;padding:0;"><span style="color:#0000ff;">using</span> System.Data.Entity;
<span style="color:#0000ff;">using</span> SimpleMembershipExample.Models;

<span style="color:#0000ff;">namespace</span> SimpleMembershipExample
{
    <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> SomeAppDbContext: DbContext
    {
        <span style="color:#0000ff;">public</span> SomeAppDbContext(): <span style="color:#0000ff;">base</span>(nameOrConnectionString: <span style="color:#006080;">"SomeAppName"</span>){}
        <span style="color:#0000ff;">public</span> DbSet&lt;Administrator&gt; Administrators { get; set; }
    }
}</pre>
</div>
<p>The DbContext only contains a single table called Administrators just to keep this super duper easy.  Yours would contain lots more. Notice in the custom constructor, I am telling the DbContext to use a specific connection string.  Lets add that connection string to the Web.Config.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image1.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border-width:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb1.png?w=612&#038;h=39" width="612" height="39" border="0" /></a></p>
<p>This connection string could be anything you want it to be.</p>
<p>Just for demo purposes, I am naming the database “SomeAppName”.  As a final step, in “Global.asax.cs”, put the following code:</p>
<div id="codeSnippetWrapper" style="overflow:auto;cursor:text;font-size:8pt;font-family:'Courier New', courier, monospace;direction:ltr;text-align:left;margin:20px 0 10px;line-height:12pt;max-height:200px;width:97.5%;background-color:#f4f4f4;padding:4px;border:silver 1px solid;">
<pre id="codeSnippet" style="overflow:visible;font-size:8pt;font-family:'Courier New', courier, monospace;color:black;direction:ltr;text-align:left;margin:0;line-height:12pt;width:100%;background-color:#f4f4f4;border-style:none;padding:0;"><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> MvcApplication : System.Web.HttpApplication
{
    <span style="color:#0000ff;">protected</span> <span style="color:#0000ff;">void</span> Application_Start()
    {
        SomeAppDbContext dbcontext = <span style="color:#0000ff;">new</span> SomeAppDbContext();
        dbcontext.Administrators.All(i =&gt; i.Name != <span style="color:#006080;">"Dan"</span>);</pre>
</div>
<p>Running the application, the magical EF Code First will create the following database.  We have a custom database with a custom user table called “Administrators”.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image2.png"><img style="background-image:none;padding-top:0;padding-left:0;margin:0;display:inline;padding-right:0;border-width:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb2.png?w=244&#038;h=154" width="244" height="154" border="0" /></a></p>
<h2>Customizing MVC 4 Internet Template</h2>
<h3>Remove InitializeSimpleMembershipAttribute</h3>
<p>The Internet template contains an Action filter called “InitializeSimpleMembershipAttribute”.  I deleted that class and removed any references to it.</p>
<h3>Replace UserProfile with your Custom User Entity</h3>
<p>The Internet template assumes that it will be adding a user table called “UserProfile” to your database.  What I think a high percentage of developers would want is to use <strong>their</strong> domain model’s “user” entity and have SimpleMembership just manage the passwords.  Let me demonstrate how to do this.</p>
<p>In the “Model” folder, in the “AccountModel.cs” file, delete the “UserProfile” class.  We want to use our “Administrator” entity instead.  Wherever UserProfile is referenced elsewhere, replace with Administrator.   The original UserProfile had properties called “UserName” and “UserId”.  Administrator has properties “Name” and “Id”.  Make sure to sync those properties up.</p>
<p>I want to have only <strong>1</strong> DbContext and I want to use <strong>my</strong> DbContext.  In the “Model” folder, in the “AccountModel.cs” file, delete the “UsersContext” class.  Wherever UsersContext is referenced elsewhere, replace with SomeAppDbContext.</p>
<h3>Call WebSecurity.InitializeDatabaseConnection</h3>
<p>As a final step, in “Global.asax.cs”, put the following code:</p>
<div id="codeSnippetWrapper" style="overflow:auto;cursor:text;font-size:8pt;font-family:'Courier New', courier, monospace;direction:ltr;text-align:left;margin:20px 0 10px;line-height:12pt;max-height:200px;width:97.5%;background-color:#f4f4f4;padding:4px;border:silver 1px solid;">
<pre id="codeSnippet" style="overflow:visible;font-size:8pt;font-family:'Courier New', courier, monospace;color:black;direction:ltr;text-align:left;margin:0;line-height:12pt;width:100%;background-color:#f4f4f4;border-style:none;padding:0;"><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> MvcApplication : System.Web.HttpApplication
{
    <span style="color:#0000ff;">protected</span> <span style="color:#0000ff;">void</span> Application_Start()
    {
        SomeAppDbContext dbcontext = <span style="color:#0000ff;">new</span> SomeAppDbContext();
        dbcontext.Administrators.All(i =&gt; i.Name != <span style="color:#006080;">"Dan"</span>);
        WebSecurity.InitializeDatabaseConnection(<span style="color:#006080;">"SomeAppName"</span>, 
            <span style="color:#006080;">"Administrators"</span>, <span style="color:#006080;">"Id"</span>, <span style="color:#006080;">"Name"</span>, autoCreateTables: <span style="color:#0000ff;">true</span>);</pre>
</div>
<p>WebSecurity.InitializeDatabaseConnection takes the web.config connection string name, the name of your custom user table (“Administrators”), the unique identifier field name of your user table (“Id”) and the user name field.  Running the InitializeDatabaseConnection method does several things:</p>
<ol>
<li>Initializes the static Roles and WebSecurity classes.</li>
<li>Adds the following tables to your database: webpages_Membership, webpages_OAuthMembership, webpages_Roles, webpages_UsersInRoles, UserProfile.</li>
</ol>
<h2>Running the Internet Application</h2>
<p>When you run the code with those changes, the following database is created:</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image3.png"><img style="background-image:none;padding-top:0;padding-left:0;margin:0;display:inline;padding-right:0;border-width:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb3.png?w=244&#038;h=149" width="244" height="149" border="0" /></a></p>
<p>The home screen looks like this:</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image4.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border-width:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb4.png?w=612&#038;h=93" width="612" height="93" border="0" /></a></p>
<p>Click on the Register link in the upper right.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image5.png"><img style="background-image:none;padding-top:0;padding-left:0;margin:0;display:inline;padding-right:0;border-width:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb5.png?w=244&#038;h=222" width="244" height="222" border="0" /></a></p>
<p>Fill out the form and click the “Register” button.  The MVC 4 Internet template application will navigate you back to the home page.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image6.png"><img style="background-image:none;padding-top:0;padding-left:0;margin:0;display:inline;padding-right:0;border-width:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb6.png?w=244&#038;h=72" width="244" height="72" border="0" /></a></p>
<p>Notice it knows the name you registered with.  If you check for cookies, you will see the typical ASPXAUTH as shown below.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image7.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border-width:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb7.png?w=612&#038;h=62" width="612" height="62" border="0" /></a></p>
<p>If you click the “Log off” link and check cookies, the ASPXAUTH cookie disappears.  The ASPXAUTH cookie is the key to the authentication.</p>
<p>When you look at the database you will see the following:</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image8.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border-width:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb8.png?w=612&#038;h=113" width="612" height="113" border="0" /></a></p>
<p>Notice with the code changes, the MVC Internet template knew to save to the custom user table “Administrators”.  The password was saved to the webpages_Membership table with a foreign key relationship to the Administrators table.</p>
<p>Please download the code <a href="https://skydrive.live.com/redir?resid=EDAFB4DBECFEE2EA!4842" target="_blank">here</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dansgreenshoes.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dansgreenshoes.wordpress.com/367/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=367&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dansgreenshoes.com/2013/03/10/mvc4usertable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0ef7f2673d2fcbe074e834864d72aa83?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">danhickman</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb4.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb5.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb6.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb7.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb8.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>ProModel Harlem Shake</title>
		<link>http://dansgreenshoes.com/2013/03/06/promodel-harlem-shake/</link>
		<comments>http://dansgreenshoes.com/2013/03/06/promodel-harlem-shake/#comments</comments>
		<pubDate>Wed, 06 Mar 2013 19:30:06 +0000</pubDate>
		<dc:creator>Dan Hickman</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Harlem Shake]]></category>

		<guid isPermaLink="false">https://dansgreenshoes.wordpress.com/?p=446</guid>
		<description><![CDATA[I just had to share this.  Aaron Nelson heads up ProModel’s support group.  He has a great sense of humor and does a great job. Aaron produced this video that shows a simulation model of various ProModel employees doing the &#8230; <a href="http://dansgreenshoes.com/2013/03/06/promodel-harlem-shake/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=446&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I just had to share this.  <a href="http://www.linkedin.com/pub/aaron-nelson/12/334/406" target="_blank">Aaron Nelson</a> heads up <a href="https://www.ProModel.com/" target="_blank">ProModel</a>’s support group.  He has a great sense of humor and does a great job.</p>
<p>Aaron produced this video that shows a simulation model of various <a href="https://www.ProModel.com/" target="_blank">ProModel</a> employees doing the <a href="http://en.wikipedia.org/wiki/Harlem_Shake_(meme)" target="_blank">Harlem Shake</a>.  Please take note that the model is even capturing stats and shows reports at the end of the video.</p>
<div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:59b907fe-5cc3-4067-92f7-35cd17adcefe" style="float:none;margin:0;display:inline;padding:0;">
<div><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='448' height='252' src='http://www.youtube.com/embed/CUJl5LmE_j8?version=3&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;hd=1&#038;wmode=transparent' frameborder='0'></iframe></span></div>
<div style="width:448px;clear:both;font-size:.8em;">Simulating the Harlem Shake</div>
</div>
<p>If you are unfamiliar with the Harlem Shake Internet meme, please check <a href="http://en.wikipedia.org/wiki/Harlem_Shake_(meme)" target="_blank">this </a>out.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dansgreenshoes.wordpress.com/446/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dansgreenshoes.wordpress.com/446/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=446&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dansgreenshoes.com/2013/03/06/promodel-harlem-shake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0ef7f2673d2fcbe074e834864d72aa83?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">danhickman</media:title>
		</media:content>
	</item>
		<item>
		<title>Fast Food Drive-Thru, 2 lanes faster than 1 Results</title>
		<link>http://dansgreenshoes.com/2013/03/05/fast-food-drive-thru-2-lanes-faster-than-1-results/</link>
		<comments>http://dansgreenshoes.com/2013/03/05/fast-food-drive-thru-2-lanes-faster-than-1-results/#comments</comments>
		<pubDate>Tue, 05 Mar 2013 19:56:23 +0000</pubDate>
		<dc:creator>Dan Hickman</dc:creator>
				<category><![CDATA[Discrete Event Simulation]]></category>
		<category><![CDATA[promodel]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">https://dansgreenshoes.wordpress.com/?p=442</guid>
		<description><![CDATA[Results The poll results and comments are very interesting. Most people feel 2 lanes versus 1 makes no difference but not all agree. This validates why I wanted to build a simple model and see what I could learn. I &#8230; <a href="http://dansgreenshoes.com/2013/03/05/fast-food-drive-thru-2-lanes-faster-than-1-results/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=442&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<h3>Results</h3>
<p>The poll results and comments are very interesting. Most people feel 2 lanes versus 1 makes no difference but not all agree. This validates why I wanted to build a simple model and see what I could learn. I created this model to have fun and encourage readers to not take the results too seriously. I do think the model is a great start to an iterative approach of building a much more complex drive thru model though. You learn a lot in building a process model and I have come to appreciate the subtle details necessary to fully model a drive thru.</p>
<p>Here is a video of me running the model and comparing 2 lane versus 1 lane on average time to get your food.</p>
<div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:d1fc63a2-ce5b-44ac-9b1e-95f100749b49" style="float:none;margin:0;display:inline;padding:0;">
<div><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='448' height='252' src='http://www.youtube.com/embed/M9v6bx3l4Dk?version=3&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;hd=1&#038;wmode=transparent' frameborder='0'></iframe></span></div>
</div>
<h3>Inputs and Assumptions</h3>
<p>My goal was to see how quickly I could capture the general flow of a drive thru and only add details as needed. The model is data driven and a user can easily change the following:</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="bottom" width="222"><b>Parameter</b></td>
<td valign="bottom" width="80"><b>Default</b></td>
</tr>
<tr>
<td valign="bottom" width="222">Number Of Lanes</td>
<td valign="bottom" width="80">2</td>
</tr>
<tr>
<td valign="bottom" width="222">Order Time In Seconds</td>
<td valign="bottom" width="80">U(30,15)</td>
</tr>
<tr>
<td valign="bottom" width="222">Percent Pay By Cash</td>
<td valign="bottom" width="80">50%</td>
</tr>
<tr>
<td valign="bottom" width="222">Pay By Credit Card Seconds</td>
<td valign="bottom" width="80">U(15,5)</td>
</tr>
<tr>
<td valign="bottom" width="222">Pay By Cash Seconds</td>
<td valign="bottom" width="80">U(30,5)</td>
</tr>
<tr>
<td valign="bottom" width="222">Pull Ahead Threshold Seconds</td>
<td valign="bottom" width="80">45</td>
</tr>
<tr>
<td valign="bottom" width="222">Pick Up Food In Seconds</td>
<td valign="bottom" width="80">U(15,5)</td>
</tr>
<tr>
<td valign="bottom" width="222">Vehicle Arrival Frequency Minutes</td>
<td valign="bottom" width="80">E(1)</td>
</tr>
<tr>
<td valign="bottom" width="222">Vehicle Arrival Quantity</td>
<td valign="bottom" width="80">1</td>
</tr>
</tbody>
</table>
<p>Certainly this list is not exhaustive, but I feel representative of the types of things that determine a drive-thru’s process performance. Just to get reasonable defaults I recorded my wait times through various fast food drive-thrus. I also recorded other driver’s times while I was there. Anyone know if drive thru times are publicly available?</p>
<p>I used a Google Map image of a real drive-thru and the distances are to scale to accurately model the impact of vehicle length. The vehicles move 1 mph as they move though the drive-thru queue.</p>
<p>When picking up the food, if the model determines it will take greater than 45 seconds, the car is told to pull ahead and not block the vehicles behind them.</p>
<h3>Potential Next Iteration</h3>
<p>Even with black boxing the “Get Food” window with a simple, single time distribution, 2 lanes ended up being faster. Had this not been true, I was planning on modeling what specific items a driver orders. I would actually model the kitchen area and the cooking of that restaurant’s menu of items. Drivers would have to wait for their specific ordered items to actually be cooked and ready.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dansgreenshoes.wordpress.com/442/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dansgreenshoes.wordpress.com/442/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=442&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dansgreenshoes.com/2013/03/05/fast-food-drive-thru-2-lanes-faster-than-1-results/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0ef7f2673d2fcbe074e834864d72aa83?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">danhickman</media:title>
		</media:content>
	</item>
		<item>
		<title>Fast Food Drive-Thru, 2 lanes faster than 1?</title>
		<link>http://dansgreenshoes.com/2013/03/01/fast-food-drive-thru-2-lanes-faster-than-1/</link>
		<comments>http://dansgreenshoes.com/2013/03/01/fast-food-drive-thru-2-lanes-faster-than-1/#comments</comments>
		<pubDate>Fri, 01 Mar 2013 21:12:10 +0000</pubDate>
		<dc:creator>Dan Hickman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://dansgreenshoes.wordpress.com/?p=434</guid>
		<description><![CDATA[Have you noticed that many of the new fast food restaurants have 2 drive-thru lanes.  My first experience with one I thought “wow, really?”.  I found myself frozen with confusion.   My wife saved me by pointing to the left lane.  &#8230; <a href="http://dansgreenshoes.com/2013/03/01/fast-food-drive-thru-2-lanes-faster-than-1/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=434&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Have you noticed that many of the new fast food restaurants have 2 drive-thru lanes.  My first experience with one I thought “wow, really?”.  I found myself frozen with confusion.   My wife saved me by pointing to the left lane.  Similar to choosing a restaurant or a movie, I now can blame her if the car behind me gets the food first.</p>
<p>My car reached the ordering sign.  I am terrible at ordering fast food.  Even though I drive 99% of the time, my wife will lean over me and shout the order through my window.  There are just too many details my over-indulged kids care about that the make the process too complicated.  Have you ever communicated the perfect order only to be replied with “sir, can you repeat that?”.  AHHH.</p>
<p>To my surprise, I noticed all cars converge on a single “pay” window.  2 lanes should be faster than one, right?  I thought it would be interesting to model the typical fast food drive-thru process comparing 1 versus 2 lanes.  Before sharing the results of my simulation model, I wanted to poll what you think.</p>
<a name="pd_a_6931735"></a>
<div class="PDS_Poll" id="PDI_container6931735" data-settings="{&quot;url&quot;:&quot;http:\/\/static.polldaddy.com\/p\/6931735.js&quot;}" style="display:inline-block;"></div>
<div id="PD_superContainer"></div>
<noscript><a href="http://polldaddy.com/poll/6931735">Take Our Poll</a></noscript>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dansgreenshoes.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dansgreenshoes.wordpress.com/434/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=434&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dansgreenshoes.com/2013/03/01/fast-food-drive-thru-2-lanes-faster-than-1/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0ef7f2673d2fcbe074e834864d72aa83?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">danhickman</media:title>
		</media:content>
	</item>
		<item>
		<title>One of the top 5% most viewed @LinkedIn profiles</title>
		<link>http://dansgreenshoes.com/2013/02/08/one-of-the-top-5-most-viewed-linkedin-profiles/</link>
		<comments>http://dansgreenshoes.com/2013/02/08/one-of-the-top-5-most-viewed-linkedin-profiles/#comments</comments>
		<pubDate>Fri, 08 Feb 2013 15:35:57 +0000</pubDate>
		<dc:creator>Dan Hickman</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">https://dansgreenshoes.wordpress.com/?p=429</guid>
		<description><![CDATA[I received an email this morning from LinkedIn stating I was one of the top 5% most viewed profiles. I am pleasantly shocked by this.  I &#8220;think&#8221; this is something i should be excited about, but honestly, i just don&#8217;t &#8230; <a href="http://dansgreenshoes.com/2013/02/08/one-of-the-top-5-most-viewed-linkedin-profiles/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=429&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I received an email this morning from LinkedIn stating I was one of the top 5% most viewed profiles.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/02/image4.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/02/image_thumb4.png?w=480&#038;h=403" width="480" height="403" border="0" /></a></p>
<p>I am pleasantly shocked by this.  I &#8220;think&#8221; this is something i should be excited about, but honestly, i just don&#8217;t know&#8230;</p>
<p>I think it is now time to turn off that automatic profile clicker I installed on all the computers at my office <img class="wlEmoticon wlEmoticon-smile" style="border-style:none;" alt="Smile" src="http://dansgreenshoes.files.wordpress.com/2013/02/wlemoticon-smile.png?w=611" />.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dansgreenshoes.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dansgreenshoes.wordpress.com/429/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=429&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dansgreenshoes.com/2013/02/08/one-of-the-top-5-most-viewed-linkedin-profiles/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0ef7f2673d2fcbe074e834864d72aa83?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">danhickman</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/02/image_thumb4.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/02/wlemoticon-smile.png" medium="image">
			<media:title type="html">Smile</media:title>
		</media:content>
	</item>
		<item>
		<title>My disappointing AncestryDNA results</title>
		<link>http://dansgreenshoes.com/2013/02/04/my-disappointing-ancestrydna-results/</link>
		<comments>http://dansgreenshoes.com/2013/02/04/my-disappointing-ancestrydna-results/#comments</comments>
		<pubDate>Mon, 04 Feb 2013 15:16:28 +0000</pubDate>
		<dc:creator>Dan Hickman</dc:creator>
				<category><![CDATA[genealogy]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[ancestry.com]]></category>
		<category><![CDATA[AncestryDNA]]></category>

		<guid isPermaLink="false">https://dansgreenshoes.wordpress.com/?p=422</guid>
		<description><![CDATA[According to family stories, my Great Grandmother was 100% Native American.  Whenever I share this, the common response is “man, you could get free college, did you know that?”.  (BTW, I did a quick google on this and the rumor &#8230; <a href="http://dansgreenshoes.com/2013/02/04/my-disappointing-ancestrydna-results/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=422&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>According to family stories, my Great Grandmother was 100% Native American.  Whenever I share this, the common response is “man, you could get free college, did you know that?”.  (BTW, I did a quick google on this and the rumor of free college for Native Americans is <a href="http://www.finaid.org/otheraid/natamind.phtml" target="_blank">not true</a>.).  As a child I was known for getting extremely tan in the summers and everyone used to say “must be that Cherokee in him!”.  So funny.</p>
<p>I already paid for college education, but, I have to admit, I desired to claim I was Native American.  In fact, I could not wait to see how much of a <a href="http://en.wikipedia.org/wiki/Mutt" target="_blank">mutt</a> I was.  Heck, the more the merrier was my thinking.  So, with great disappointment, allow me to share my results….</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/02/image.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/02/image_thumb.png?w=612&#038;h=179" width="612" height="179" border="0" /></a></p>
<p>How amazingly boring!  I am 96% from modern day England, Ireland, Scotland, Wales.  Where is Great Grandmother’s Native American blood?  I so badly want to drill into the measly 4% and get me some good ole diversity out of it.  I anxiously waited 4 weeks to be boring, /sigh.</p>
<p><span id="more-422"></span>I met my Great Grandmother and she definitely was a Native American.  I question the results but really, what do I know.  I searched around for an alternative DNA service and discovered <a href="http://www.23andme.com">www.23andme.com</a>.  At the time I was searching, 23andme was $300 dollars to genotype your DNA versus $100 at AncestryDNA.  I decided it made more sense to genotype my mom, dad and my wife for my $300.  Here are my parents results:</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/02/image1.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/02/image_thumb1.png?w=612&#038;h=176" width="612" height="176" border="0" /></a></p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/02/image2.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/02/image_thumb2.png?w=612&#038;h=179" width="612" height="179" border="0" /></a></p>
<p>Boo!  Still not seeing Native American ethnicity.  Despite my lack of cool ethnicity, the AncestryDNA service is actually very very cool.  Let me explain.</p>
<p>AncestryDNA will take the genotype results from its many members and look for family relationships.  If by chance the matched DNA members’ trees have names in common in their tree, it will also point those out for you.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/02/image3.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/02/image_thumb3.png?w=612&#038;h=410" width="612" height="410" border="0" /></a></p>
<p>As you can see above, my Dad has a potential 3rd cousin match.  Clicking on “Review Match” will show the shared ancestors.  My dad and I have hundreds of potential matches where the majority of them do not have shared ancestors on the trees.  That is where the hard work begins.  IMO, to get the most out of the service, you have to completely fill out your tree.  Prior to genotyping my DNA, my tree just contained my direct lineage.  I did not take the time to fill out my great great grandfathers brother and sisters.  I was focused on just my pedigree so my tree was tall but not wide.  To get your tree to match up to a potential 5th cousin, my tree has to be “wider” consisting of my great aunts and great great uncles.  This will take some time!</p>
<p>Here is my theory of how to figure out my surname:</p>
<ol>
<li>Get my tree as wide as possible.</li>
<li>Focusing on my dad’s DNA match result, try to get as many shared ancestors on my tree as possible.</li>
<li>DNA matches that I cannot get a shared ancestors in the trees, are candidates for containing my true surname.  AncestryDNA will tell you what potential cousin generation so I can find that approximate generation in the matches tree.  Look for doctors living in Tennessee in their trees around the same time.</li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dansgreenshoes.wordpress.com/422/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dansgreenshoes.wordpress.com/422/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=422&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dansgreenshoes.com/2013/02/04/my-disappointing-ancestrydna-results/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0ef7f2673d2fcbe074e834864d72aa83?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">danhickman</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/02/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/02/image_thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/02/image_thumb2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/02/image_thumb3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>ASP.Net MVC 4 SPA navigation with Sammy.js</title>
		<link>http://dansgreenshoes.com/2013/01/23/asp-net-mvc-4-spa-navigation-with-sammy-js/</link>
		<comments>http://dansgreenshoes.com/2013/01/23/asp-net-mvc-4-spa-navigation-with-sammy-js/#comments</comments>
		<pubDate>Wed, 23 Jan 2013 15:12:30 +0000</pubDate>
		<dc:creator>Dan Hickman</dc:creator>
				<category><![CDATA[CodeProject]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ASP.net MVC]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[sammy.js]]></category>

		<guid isPermaLink="false">https://dansgreenshoes.wordpress.com/?p=405</guid>
		<description><![CDATA[I am learning from John Papa&#8217;s &#8220;Single Page Apps with HTML5, Web API, Knockout and jQuery&#8221; on Pluralsight. The course outlines building an application called &#8220;Code Camper&#8221;.  The “Code Camper” sample is very effective at showing an end to end &#8230; <a href="http://dansgreenshoes.com/2013/01/23/asp-net-mvc-4-spa-navigation-with-sammy-js/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=405&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I am learning from John Papa&#8217;s &#8220;Single Page Apps with HTML5, Web API, Knockout and jQuery&#8221; on Pluralsight. The course outlines building an application called &#8220;Code Camper&#8221;.  The “Code Camper” sample is very effective at showing an end to end SPA design.  It leverages a bunch of open source libraries and can be a lot to take in all at once.  One of the libraries used is called Sammy.js.  I decided it would beneficial to focus on just <a href="http://sammyjs.org/" target="_blank">Sammy.js</a> library which is the focus of this blog post.</p>
<p>If you are like me then you are also new to Single-Page Applications.  I find it helpful to start with a simple definition.  <a href="http://en.wikipedia.org/wiki/Single-page_application" target="_blank">Wikipedia defines SPA</a> as a “web application…that fits on a single <a href="http://en.wikipedia.org/wiki/Web_page">web page</a> with the goal of providing a more fluid user experience akin to a desktop application.  In an SPA, either all necessary code – <a href="http://en.wikipedia.org/wiki/HTML">HTML</a>, <a href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a>, and <a href="http://en.wikipedia.org/wiki/CSS">CSS</a> – is retrieved with a single page load, or partial changes are performed loading new code on demand from the web server, usually driven by user actions.”<span id="more-405"></span></p>
<h2>ASP.NET MVC versus Single Page Application</h2>
<p>Suppose you have a HTML, JavaScript and CSS application loaded in a browser.  If you look at the home page source, you might notice a series of anchor elements containing hypertext links to other areas within your application such as an “About” page.  If you build a SPA version of this application versus a traditional ASP.NET MVC version, it would be difficult to tell them apart by inspecting the HTML only.  The anchor tags would look very very similar if not identical.</p>
<p>In a standard MVC application, when the User clicks on the “About” hyperlink, MVC’s routing would find the server-side controller which would create a HTML page on the server and navigate the browser to this new page.</p>
<p>In a SPA, when the User clicks on the “About” hyperlink, the client side HTML is dynamically manipulated all within the client’s browser using standard HTML, JavaScript and CSS.  Since a costly server trip is avoided, the result is typically “a more fluid user experience”.  To pull this off, typically a SPA loads more data in memory upfront to enable the application to stay on the client.</p>
<p>Sammy.js is an open source library that Code Camper leverages to help pull off the SPA behavior but at the same time keep all the good things the browsers do for us such as history management, etc.   Its pretty slick.</p>
<p>For me, the following question captures one of the cool features of Sammy.js:  “How can I create a standard HTML anchor tag that when the user clicks, instead of requesting a resource on the server, I can intercept the request on the client and call a JavaScript function?”  Let me show you an example that answers this question.  This example is a modified version of the example provided in the following blog post.</p>
<p><a title="http://mikehadlow.blogspot.com/2010/11/sammyjs.html#/" href="http://mikehadlow.blogspot.com/2010/11/sammyjs.html#/">http://mikehadlow.blogspot.com/2010/11/sammyjs.html#/</a> My version mimics how Code Camper works as well.  Thanks Mike Hadlow for this very simple example.</p>
<h1>Step by Step</h1>
<p>Create a new ASP.NET MVC4 Internet Application Project called &#8220;MVC4Sammy or download the finished code <a href="https://skydrive.live.com/redir?resid=EDAFB4DBECFEE2EA!8049&amp;authkey=!AEWHlziMo5gAZrI">here</a>.</p>
<p>Right click on References and click on “Manage NuGet Packages…”.  search for Sammy.js and click “Install”</p>
<p>In the root of the project, add a “MVC 4 View Page (Razor) called “Index.cshtml”.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image11.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border-width:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb11.png?w=563&#038;h=214" width="563" height="214" border="0" /></a></p>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  1: &lt;!DOCTYPE html&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  2: &lt;html&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  3: &lt;head&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  4:     &lt;meta <span style="color:#0000ff;">name</span>="<span style="color:#8b0000;">viewport</span>" content="<span style="color:#8b0000;">width=device-width</span>" /&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  5:     &lt;title&gt;Sammy Test&lt;/title&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  6:     &lt;script src="<span style="color:#8b0000;">Scripts/jquery-1.8.2.js</span>"&gt;&lt;/script&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  7:     &lt;script src="<span style="color:#8b0000;">Scripts/sammy-0.7.2.js</span>"&gt;&lt;/script&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  8:     &lt;script src="<span style="color:#8b0000;">Scripts/sammy_test.js</span>"&gt;&lt;/script&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  9: &lt;/head&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 10: &lt;body&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 11:     &lt;div id="<span style="color:#8b0000;">header</span>"&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 12:             &lt;h1&gt;Sammy Test&lt;/h1&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 13:             &lt;a href="<span style="color:#8b0000;">#/one</span>"&gt;one&lt;/a&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 14:             &lt;a href="<span style="color:#8b0000;">#/two</span>"&gt;two&lt;/a&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 15:             &lt;a href="<span style="color:#8b0000;">/#three</span>"&gt;three&lt;/a&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 16:             &lt;a href="<span style="color:#8b0000;">HtmlPage1.html</span>"&gt;HtmlPage1&lt;/a&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 17:             &lt;a href="<span style="color:#8b0000;">http://www.promodel.com</span>"&gt;ProModel&lt;/a&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 18:         &lt;/div&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 19:         &lt;div id="<span style="color:#8b0000;">main</span>"&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 20:             &lt;section <span style="color:#0000ff;">class</span>="<span style="color:#8b0000;">main</span>"&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 21:                 @RenderPage("<span style="color:#8b0000;">Views/Partial1.cshtml</span>")</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 22:                 @RenderPage("<span style="color:#8b0000;">Views/Partial2.cshtml</span>")</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 23:                 @RenderPage("<span style="color:#8b0000;">Views/Partial3.cshtml</span>")</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 24:             &lt;/section&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 25:         &lt;/div&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 26: &lt;/body&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 27: &lt;/html&gt;</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 28:</pre>
<p>Delete all the files from “Views” folder.  Right click on the empty “Views” folder and Add a partial “View” called Partial1.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image12.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border-width:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb12.png?w=486&#038;h=552" width="486" height="552" border="0" /></a></p>
<p>Put the following code in Partial1.cshtml.</p>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#fbfbfb;"><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">section</span> <span style="color:#ff0000;">id</span>=<span style="color:#0000ff;">"partial1-view"</span> <span style="color:#ff0000;">class</span>=<span style="color:#0000ff;">"view"</span><span style="color:#0000ff;">&gt;</span></pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#fbfbfb;">    <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">div</span><span style="color:#0000ff;">&gt;</span>Hello from Partial 1<span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">div</span><span style="color:#0000ff;">&gt;</span></pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#fbfbfb;"><span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">section</span><span style="color:#0000ff;">&gt;</span></pre>
<p>Repeat for Partial2 and Partial3 but change the section ids.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image13.png"><img style="background-image:none;padding-top:0;padding-left:0;margin:0;display:inline;padding-right:0;border:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb13.png?w=244&#038;h=94" width="244" height="94" border="0" /></a></p>
<p>Add a new “JavaScript file” in the “Scripts” folder called “sammy_test.js”.  Put the following code:</p>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  1: (<span style="color:#0000ff;">function</span> ($) {</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  2:</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  3:     <span style="color:#0000ff;">var</span> app = $.sammy('#main', <span style="color:#0000ff;">function</span> () {</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  4:</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  5:         <span style="color:#0000ff;">this</span>.get("<span style="color:#8b0000;">#/one</span>", <span style="color:#0000ff;">function</span> (context) {</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  6:             $("<span style="color:#8b0000;">.view</span>").hide();</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  7:             $("<span style="color:#8b0000;">#partial1-view</span>").show();</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  8:         });</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;">  9:</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 10:         <span style="color:#0000ff;">this</span>.get("<span style="color:#8b0000;">#/two</span>", <span style="color:#0000ff;">function</span> (context) {</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 11:             $("<span style="color:#8b0000;">.view</span>").hide();</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 12:             $("<span style="color:#8b0000;">#partial2-view</span>").show();</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 13:         });</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 14:</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 15:         <span style="color:#0000ff;">this</span>.get("<span style="color:#8b0000;">/#three</span>", <span style="color:#0000ff;">function</span> (context) {</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 16:             $("<span style="color:#8b0000;">.view</span>").hide();</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 17:             $("<span style="color:#8b0000;">#partial3-view</span>").show();</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 18:         });</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 19:     });</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 20:</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 21:     $(<span style="color:#0000ff;">function</span> () {</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 22:         app.run('#/');</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 23:     });</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 24:</pre>
<pre style="font-size:10px;font-family:consolas, 'Courier New', courier, monospace;margin:0;width:100%;background-color:#ffffff;"> 25: })(jQuery);</pre>
<p>Modified root Web.Config webpages:Enabled to true.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image14.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border-width:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb14.png?w=612&#038;h=93" width="612" height="93" border="0" /></a></p>
<p>Add a new “Html Page” to the root called “HtmlPage1”.  Put any text in the body.</p>
<p>Set Index.cshtml as Start Page and Run.</p>
<h1>Highlights</h1>
<p>Similar to Code Camper, this example MVC4 SPA creates a root view called &#8220;index.cshtml&#8221; containing a series of @RenderPage calls against some partial views.  The partial views represent the various modules within an application.  Each partial view is declared within a “Section” element with a unique id and a shared class called “view”.</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image15.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb15.png?w=612&#038;h=39" width="612" height="39" border="0" /></a></p>
<p>In the “sammy_test.js” file, you will see code registering “get” routes with JavaScript functions such as:</p>
<p><a href="http://dansgreenshoes.files.wordpress.com/2013/01/image16.png"><img style="background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border:0;" title="image" alt="image" src="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb16.png?w=601&#038;h=156" width="601" height="156" border="0" /></a></p>
<p>When the user clicks on a link that goes to “#/one”, that function will be called instead of requesting a resource from the server.  The JavaScript code hides any element with a class called “view” then immediately shows any element with a id value of “partial1-view”.</p>
<p>There are probably a million ways to do this but this example shows how the client is dynamically manipulated without going to the server.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dansgreenshoes.wordpress.com/405/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dansgreenshoes.wordpress.com/405/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dansgreenshoes.com&#038;blog=40836454&#038;post=405&#038;subd=dansgreenshoes&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dansgreenshoes.com/2013/01/23/asp-net-mvc-4-spa-navigation-with-sammy-js/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0ef7f2673d2fcbe074e834864d72aa83?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">danhickman</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb11.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb12.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb13.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb14.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb15.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dansgreenshoes.files.wordpress.com/2013/01/image_thumb16.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
	</channel>
</rss>
