The main advantages of ASP.net MVC are
1) Enables the full control over the rendered HTML.
2) Provides clean separation of concerns(SoC).
3) Enables Test Driven Development (TDD).
4) Easy integration with JavaScript frameworks.
5) Following the design of stateless nature of the web.
6) RESTful urls that enables SEO.
7) No ViewState and PostBack events
The main advantage of ASP.net Web Form are
1) It provides RAD development
2) Easy development model for developers those coming from winform development.
In webforms you could also render almost whole html by hand, except few tags like viewstate, eventvalidation and similar, which can be removed with PageAdapters. Nobody force you to use GridView or some other server side control that has bad html rendering output.
I would say that biggest advantage of MVC is SPEED!
Next is forced separation of concern. But it doesn't forbid you to put whole BL and DAL logic inside Controller/Action! It's just separation of view, which can be done also in webforms (MVP pattern for example). A lot of things that people mentions for mvc can be done in webforms, but with some additional effort.
Main difference is that request comes to controller, not view, and those two layers are separated, not connected via partial class like in webforms (aspx + code behind)
Biggest single advantage for me would be the clear-cut separation between your Model, View, and Controller layers. It helps promote good design from the start.
MVC has better separation of responsibilities
MVC is much easier to create very complex websites with a minimum of code
Web forms are very easy to slap together
Web forms hide away complexity from the developer in web controls
Web forms use the same mental model of development that windows forms use
/* -----------Date picker start----------- */
var datePickerDivID = "datepicker";
var iFrameDivID = "datepickeriframe";
var dayArrayShort = new Array('Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa');
var dayArrayMed = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
var dayArrayLong = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var monthArrayShort = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
var monthArrayMed = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec');
var monthArrayLong = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
var defaultDateSeparator = "/";
var defaultDateFormat = "dmy";
var dateSeparator = defaultDateSeparator;
var dateFormat = defaultDateFormat;
function displayDatePicker(dateFieldName, displayBelowThisObject, dtFormat, dtSep)
{
var targetDateField = document.getElementsByName (dateFieldName).item(0);
if (!displayBelowThisObject)
displayBelowThisObject = targetDateField;
if (dtSep)
dateSeparator = dtSep;
else
dateSeparator = defaultDateSeparator;
if (dtFormat)
dateFormat = dtFormat;
else
dateFormat = defaultDateFormat;
var x = displayBelowThisObject.offsetLeft;
var y = displayBelowThisObject.offsetTop + displayBelowThisObject.offsetHeight ;
var parent = displayBelowThisObject;
while (parent.offsetParent) {
parent = parent.offsetParent;
x += parent.offsetLeft;
y += parent.offsetTop ;
}
drawDatePicker(targetDateField, x, y);
}
function drawDatePicker(targetDateField, x, y)
{
datePickerTempCanclose=true;
var dt = getFieldDate(targetDateField.value );
if (!document.getElementById(datePickerDivID)) {
var newNode = document.createElement("div");
newNode.setAttribute("id", datePickerDivID);
newNode.setAttribute("class", "dpDiv");
newNode.setAttribute("style", "visibility: hidden;");
document.body.appendChild(newNode);
}
var pickerDiv = document.getElementById(datePickerDivID);
pickerDiv.style.position = "absolute";
pickerDiv.style.left = x + "px";
pickerDiv.style.top = y + "px";
pickerDiv.style.visibility = (pickerDiv.style.visibility == "visible" ? "hidden" : "visible");
pickerDiv.style.display = (pickerDiv.style.display == "block" ? "none" : "block");
pickerDiv.style.zIndex = 10000;
refreshDatePicker(targetDateField.name, dt.getFullYear(), dt.getMonth(), dt.getDate());
}
function getLMSGMTDate(){
try{
var date = new Date();
var tempDateArray1 = LMSGMT.split(' ');
var tempDateArray2 = tempDateArray1[0].split('/');
var ye = parseInt(tempDateArray2[2]);
var mo = (parseInt(tempDateArray2[1])==0?parseInt(tempDateArray2[1].charAt(1)):parseInt(tempDateArray2[1]))-1;
var da = (parseInt(tempDateArray2[0])==0?parseInt(tempDateArray2[0].charAt(1)):parseInt(tempDateArray2[0]));//parseInt(tempDateArray2[0]);
var tempDateArray3 = tempDateArray1[1].split(':');
var hour = tempDateArray3[0];
var min = tempDateArray3[1];
var sec = tempDateArray3[2];
var thisDay = new Date(ye,mo,da,hour,min,sec);
return thisDay;
}catch(e){return new Date();}
}
function setDateTimePickerToFields(ids){
var dateTimeArray = LMSGMT.split(' ');
var dateArray = dateTimeArray[0].split('/');
var timeArray = dateTimeArray[1].split(':');
var dateArg = parseInt(dateArray[2]+dateArray[1]+dateArray[0]);
var timeArg = timeArray[0]+timeArray[1];
var id=ids.split(",");
for(var i=0;i
var cal = Calendar.setup({
onSelect: function(cal) {
cal.hide();
},
date: dateArg,
time:timeArg,
showTime: 12
});
cal.manageFields(id[i], id[i], "%d/%b/%Y %H:%M:%S");
cal.selection.set(dateArg);
}
}
function refreshDatePicker(dateFieldName, year, month, day){
/*var tempDateArray = LMSGMT.split('/');
var ye = parseInt(tempDateArray[2])-1900;
var mo = 0;
var da = parseInt(tempDateArray[0]);
for(var monIndex =0 ;monIndex<12;monIndex++){
if(tempDateArray[1]==monthArrayShort[monIndex]){
mo = monIndex;
}
}
var thisDay = new Date(ye,mo,da);*/
var thisDay = getLMSGMTDate();
if ((month >= 0) && (year > 0)) {
day = thisDay.getDate();
thisDay = new Date(year, month, 1);
} else {
day = thisDay.getDate();
thisDay.setDate(1);
}
var crlf = "\r\n";
var TABLE = "
var TR = "";
var TR_title = "";
var TR_days = "";
var TR_todaybutton = "";
var xTR = "" + crlf;
var TD = "
var TD_title = "";
var TD_buttons = "";
var TD_todaybutton = "";
var TD_days = "";
var TD_selected = "
var xTD = "" + crlf;
var DIV_title = "
var DIV_selected = "
var xDIV = "
var html = TABLE;
html += TR_title;
html += TD_buttons + getButtonCode(dateFieldName, thisDay, -1, "<") + xTD;
html += TD_title + DIV_title + monthArrayShort[ thisDay.getMonth()] + " " + thisDay.getFullYear() + xDIV + xTD;
html += TD_buttons + getButtonCode(dateFieldName, thisDay, 1, ">") + xTD;
html += xTR;
html += TR_days;
for(i = 0; i < dayArrayShort.length; i++)
html += TD_days + dayArrayShort[i] + xTD;
html += xTR;
html += TR;
for (i = 0; i < thisDay.getDay(); i++)
html += TD + " " + xTD;
do {
dayNum = thisDay.getDate();
TD_onclick = " onclick=\"updateDateField('" + dateFieldName + "', '" + getDateString(thisDay) + "');\">";
if (dayNum == day)
html += TD_selected + TD_onclick + DIV_selected + dayNum + xDIV + xTD;
else
html += TD + TD_onclick + dayNum + xTD;
if (thisDay.getDay() == 6)
html += xTR + TR;
thisDay.setDate(thisDay.getDate() + 1);
} while (thisDay.getDate() > 1)
if (thisDay.getDay() > 0) {
for (i = 6; i > thisDay.getDay(); i--)
html += TD + " " + xTD;
}
html += xTR;
var today = new Date();
var todayString = "Today is " + dayArrayMed[today.getDay()] + ", " + monthArrayShort[ today.getMonth()] + " " + today.getDate();
html += TR_todaybutton + TD_todaybutton;
html += " ";
html += "";
html += xTD + xTR;
html += xTABLE;
document.getElementById(datePickerDivID).innerHTML = html;
adjustiFrame();
}
function getButtonCode(dateFieldName, dateVal, adjust, label)
{
var newMonth = (dateVal.getMonth () + adjust) % 12;
var newYear = dateVal.getFullYear() + parseInt((dateVal.getMonth() + adjust) / 12);
if (newMonth < 0) {
newMonth += 12;
newYear += -1;
}
return "";
}
function getDateString(dateVal)
{
var dayString = "00" + dateVal.getDate();
var monthString =monthArrayShort[ dateVal.getMonth()];
dayString = dayString.substring(dayString.length - 2);
monthString = monthString.substring(monthString.length - 3);
switch (dateFormat) {
case "dmy" :
return dayString + dateSeparator + monthString + dateSeparator + dateVal.getFullYear();
case "ymd" :
return dateVal.getFullYear() + dateSeparator + monthString + dateSeparator + dayString;
case "mdy" :
default :
return monthString + dateSeparator + dayString + dateSeparator + dateVal.getFullYear();
}
}
function getFieldDate(dateString)
{
var dateVal;
var dArray;
var d, m, y;
try {
dArray = splitDateString(dateString);
if (dArray) {
switch (dateFormat) {
case "dmy" :
d = parseInt(dArray[0], 10);
m = parseInt(dArray[1], 10) - 1;
y = parseInt(dArray[2], 10);
break;
case "ymd" :
d = parseInt(dArray[2], 10);
m = parseInt(dArray[1], 10) - 1;
y = parseInt(dArray[0], 10);
break;
case "mdy" :
default :
d = parseInt(dArray[1], 10);
m = parseInt(dArray[0], 10) - 1;
y = parseInt(dArray[2], 10);
break;
}
dateVal = new Date(y, m, d);
} else if (dateString) {
dateVal = new Date(dateString);
} else {
dateVal = getLMSGMTDate();
}
} catch(e) {
dateVal = getLMSGMTDate();
}
return dateVal;
}
function splitDateString(dateString)
{
var dArray;
if (dateString.indexOf("/") >= 0)
dArray = dateString.split("/");
else if (dateString.indexOf(".") >= 0)
dArray = dateString.split(".");
else if (dateString.indexOf("-") >= 0)
dArray = dateString.split("-");
else if (dateString.indexOf("\\") >= 0)
dArray = dateString.split("\\");
else
dArray = false;
return dArray;
}
function updateDateField(dateFieldName, dateString)
{
var targetDateField = document.getElementsByName (dateFieldName).item(0);
if (dateString)
targetDateField.value = dateString;
var pickerDiv = document.getElementById(datePickerDivID);
pickerDiv.style.visibility = "hidden";
pickerDiv.style.display = "none";
adjustiFrame();
targetDateField.focus();
if ((dateString) && (typeof(datePickerClosed) == "function"))
datePickerClosed(targetDateField);
}
function adjustiFrame(pickerDiv, iFrameDiv)
{
var is_opera = (navigator.userAgent.toLowerCase().indexOf("opera") != -1);
if (is_opera)
return;
try {
if (!document.getElementById(iFrameDivID)) {
var newNode = document.createElement("iFrame");
newNode.setAttribute("id", iFrameDivID);
newNode.setAttribute("src", "javascript:false;");
newNode.setAttribute("scrolling", "no");
newNode.setAttribute ("frameborder", "0");
document.body.appendChild(newNode);
}
if (!pickerDiv)
pickerDiv = document.getElementById(datePickerDivID);
if (!iFrameDiv)
iFrameDiv = document.getElementById(iFrameDivID);
try {
iFrameDiv.style.position = "absolute";
iFrameDiv.style.width = pickerDiv.offsetWidth;
iFrameDiv.style.height = pickerDiv.offsetHeight ;
iFrameDiv.style.top = pickerDiv.style.top;
iFrameDiv.style.left = pickerDiv.style.left;
iFrameDiv.style.zIndex = pickerDiv.style.zIndex - 1;
iFrameDiv.style.visibility = pickerDiv.style.visibility ;
iFrameDiv.style.display = pickerDiv.style.display;
} catch(e) {
}
} catch (ee) {
}
}
function closeDateField(){
var pickerDiv = document.getElementById(datePickerDivID);
if(pickerDiv){
pickerDiv.style.visibility = "hidden";
pickerDiv.style.display = "none";
adjustiFrame();
}
return true;
}
/* ----------- Date picker end ----------- */
The following Javascript function to generate yui datatable with json data,
sortedBy : {key:myDataSource.responseSchema.fields[1],
dir:YAHOO.widget.DataTable.CLASS_ASC}, // Sets UI initial sort arrow