Sunday, November 23, 2014

Difference between Asp.Net MVC and Web Forms



Difference between Asp.Net MVC and Web Forms
Asp.Net Web Forms
Asp.Net MVC
Asp.Net Web Form follow a traditional event driven development model.
Asp.Net MVC is a lightweight and follow MVC (Model, View, Controller) pattern based development model.
Asp.Net Web Form has server controls.
Asp.Net MVC has html helpers.
Asp.Net Web Form supports view state for state management at client side.
Asp.Net MVC does not support view state.
Asp.Net Web Form has file-based URLs means file name exist in the URLs must have its physically existence.
Asp.Net MVC has route-based URLs means URLs are divided into controllers and actions and moreover it is based on controller not on physical file.
Asp.Net Web Form follows Web Forms Syntax
Asp.Net MVC follow customizable syntax (Razor as default)
In Asp.Net Web Form, Web Forms(ASPX) i.e. views are tightly coupled to Code behind(ASPX.CS) i.e. logic.
In Asp.Net MVC, Views and logic are kept separately.
Asp.Net Web Form has Master Pages for consistent look and feels.
Asp.Net MVC has Layouts for consistent look and feels.
Asp.Net Web Form has User Controls for code re-usability.
Asp.Net MVC has Partial Views for code re-usability.
Asp.Net Web Form has built-in data controls and best for rapid development with powerful data access.
Asp.Net MVC is lightweight, provide full control over markup and support many features that allow fast & agile development. Hence it is best for developing interactive web application with latest web standards.
Asp.Net Web Form is not Open Source.
Asp.Net Web MVC is an Open Source.



Saturday, November 8, 2014

MVC Web Grid First Next Prev Last Pager...



MVC First Next Prev Last Pager
Add Model>edmx File After…
Add Control
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using GridviewPagingNew;
using System.Web.Helpers;

namespace GridviewPagingNew.Controllers
{
    public class JobsController : Controller
    {
        private Naresh db = new Naresh();
        const int pageSize = 10;

        // GET: Jobs
        public ActionResult Index(int page=1)
        {
            //var jobs = db.Jobs.Include(j => j.User);
            //return View(jobs.ToList());

            var jobs = db.Jobs.OrderBy(p => p.Id).Skip((page - 1) * pageSize).Take(pageSize).ToList();

            ViewBag.CurrentPage = page;
            ViewBag.PageSize = pageSize;
            ViewBag.TotalPages = (int)Math.Ceiling((double)db.Jobs.Count() / pageSize);

            return View(jobs.ToList());
        }


        // GET: Jobs/Details/5
        public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Job job = db.Jobs.Find(id);
            if (job == null)
            {
                return HttpNotFound();
            }
            return View(job);
        }
        public JsonResult EfficientPaging(int? page)
        {
            int skip = page.HasValue ? page.Value - 1 : 0;
            var data = db.Jobs.OrderBy(o => o.Id).Skip(skip * 10).Take(10).ToList();
            var grid = new WebGrid(data);
            var htmlString = grid.GetHtml(tableStyle: "webGrid",
                                          headerStyle: "header",
                                          footerStyle: "foot",
                                          alternatingRowStyle: "alt",
                                          columns: new[] { grid.Column("Id"), grid.Column("Title"), grid.Column("CountryId")});
                                          //htmlAttributes: new { id = "DataTable" });

            var tempData = htmlString.ToHtmlString();

            return Json(new
            {
                Data = htmlString.ToHtmlString(),
                Count = db.Jobs.Count() / 10,
                CurrentPage = skip
            }, JsonRequestBehavior.AllowGet);

        }

        // GET: Jobs/Create
        public ActionResult Create()
        {
            ViewBag.UserId = new SelectList(db.Users, "Id", "Title");
            return View();
        }

        // POST: Jobs/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = Rss,IsCaterer,IsDice,IsDirect,IsCareesma,IsRezidor,IsIhg,IsIndeed,IsKempinski,IsSerco,IsTaj,IsCompanyXml")] Job job)
        {
            if (ModelState.IsValid)
            {
                db.Jobs.Add(job);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.UserId = new SelectList(db.Users, "Id", "Title", job.UserId);
            return View(job);
        }

        // GET: Jobs/Edit/5
        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Job job = db.Jobs.Find(id);
            if (job == null)
            {
                return HttpNotFound();
            }
            ViewBag.UserId = new SelectList(db.Users, "Id", "Title", job.UserId);
            return View(job);
        }

        // POST: Jobs/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include = "Id,Title,CompanyName,Salary,CountryId,JobDescription,MinExperience,MaxExperience, ,IsTaj,IsCompanyXml")] Job job)
        {
            if (ModelState.IsValid)
            {
                db.Entry(job).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.UserId = new SelectList(db.Users, "Id", "Title", job.UserId);
            return View(job);
        }

        // GET: Jobs/Delete/5
        public ActionResult Delete(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Job job = db.Jobs.Find(id);
            if (job == null)
            {
                return HttpNotFound();
            }
            return View(job);
        }

        // POST: Jobs/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            Job job = db.Jobs.Find(id);
            db.Jobs.Remove(job);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }

    }
}
.cshtml File…
@model IEnumerable<GridviewPagingNew.Job>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
@helper buildLinks(int start, int end, string innerContent)
{
    for (int i = start; i <= end; i++)
    {
        <a class="@(i == ViewBag.CurrentPage ? "current" : "")" href="@Url.Action("Index", "Jobs", new { page = i })">@(innerContent ?? i.ToString())</a>
    }

}
@helper pageLinks()
{
    const int maxPages = 11;

    if (ViewBag.TotalPages <= maxPages)
    {

        @buildLinks(1, (int)ViewBag.TotalPages, null)
        return;
    }

    int pagesAfter = ViewBag.TotalPages - ViewBag.CurrentPage; // Number of pages after current
    int pagesBefore = ViewBag.CurrentPage - 1; // Number of pages before current

    if (pagesAfter <= 4)
    {
        @buildLinks(1, 1, null) // Show 1st page

        int pageSubset = ViewBag.TotalPages - maxPages - 1 > 1 ? ViewBag.TotalPages - maxPages - 1 : 2;
        @buildLinks(pageSubset, pageSubset, "...") // Show page subset (...)

        @buildLinks(ViewBag.TotalPages - maxPages + 3, ViewBag.TotalPages, null) // Show last pages

        return; // Exit
    }

    if (pagesBefore <= 4)
    {
        @buildLinks(1, maxPages - 2, null) // Show 1st pages


        int pageSubset = maxPages + 2 < ViewBag.TotalPages ? maxPages + 2 : ViewBag.TotalPages - 1;
        @buildLinks(pageSubset, pageSubset, "...") // Show page subset (...)

        @buildLinks(ViewBag.TotalPages, ViewBag.TotalPages, null) // Show last page

        return; // Exit

    }

    if (pagesAfter > 4)
    {
        @buildLinks(1, 1, null) // Show 1st pages

        int pageSubset1 = ViewBag.CurrentPage - 7 > 1 ? ViewBag.CurrentPage - 7 : 2;
        int pageSubset2 = ViewBag.CurrentPage + 7 < ViewBag.TotalPages ? ViewBag.CurrentPage + 7 : ViewBag.TotalPages - 1;

        @buildLinks(pageSubset1, pageSubset1, pageSubset1 == ViewBag.CurrentPage - 4 ? null : "...") // Show 1st page subset (...)

        @buildLinks(ViewBag.CurrentPage - 3, ViewBag.CurrentPage + 3, null) // Show middle pages

        // Show 2nd page subset (...)
        // only show ... if page is contigous to the previous one.
        @buildLinks(pageSubset2, pageSubset2, pageSubset2 == ViewBag.CurrentPage + 4 ? null : "...")
        @buildLinks(ViewBag.TotalPages, ViewBag.TotalPages, null) // Show last page

        return; // Exit

    }
}


<input type="hidden" id="hdnCurrentPage" />
<div id="divGrid">
    <div id="divMain"></div>
    <div id="divFoot" class="foot"></div>
</div>
@section scripts{
    <script type="text/javascript">
            $(function () {
                $.getJSON("/Jobs/EfficientPaging",null, function (d) {
                    // add the dynamic WebGrid to the body
                    $("#divMain").html(d.Data);

                    // create the footer
                    var footer = createFooter(d.Count, d.CurrentPage);

                    $("#divFoot a").live("click", function (e) {
                        e.preventDefault();
                        // Manage Pagging
                        var PageCount = 1;
                        if ($(this).text() == "First") {
                            PageCount = 1;
                        }
                        else if ($(this).text() == "Last") {
                            PageCount = d.Count;
                        }
                        else if ($(this).text() == "Next") {
                            if (d.Count == $("#hdnCurrentPage").val())
                                PageCount = d.Count;
                            else
                                PageCount = (parseInt($("#hdnCurrentPage").val()) + 1);
                        }
                        else if ($(this).text() == "Previous") {
                            if ($("#hdnCurrentPage").val() == 1)
                                PageCount = 1;
                            else
                                PageCount = (parseInt($("#hdnCurrentPage").val()) - 1);
                        }
                        else
                            PageCount = $(this).text();

                        var data = {
                            page: PageCount
                        };
                        // get data of current page
                        $.getJSON("/Jobs/EfficientPaging", data, function (html) {
                            // add the data to the table
                            $("#DataTable").remove();
                            $("#divMain").html(html.Data);
                            var footer = createFooter(d.Count, html.CurrentPage);

                        });
                    });
                });
            });

            function createFooter(totalPages, CurrentPage) {
                var maxPagess = 10;
                var rowsPerPage = 10;
                var footer = "<div>";
                if ((CurrentPage + 1) == 1) {
                    footer = footer + "First &nbsp;";
                    footer = footer + "Previous&nbsp;";
                }
                else {
                    footer = footer + "<a href=#>First</a>&nbsp;";
                    footer = footer + "<a href=#>Previous</a>&nbsp;";
                }
               
               
                var nn = 0;
                if (CurrentPage == 0 || CurrentPage == 1 || CurrentPage == 2 || CurrentPage == 3 || CurrentPage==4 || CurrentPage==5) {
                    nn = 1;
                }
                else {
                    nn = CurrentPage - 4;

                }
                for (var i = nn; i < (totalPages + 1) ; i++) {
                        if ((CurrentPage + 1) == i) {
                            footer = footer + "" + i + "&nbsp;";
                            ///footer = footer + "&nbsp;";
                            $("#hdnCurrentPage").val(i);

                        }
                        else {
                            if ((CurrentPage + 5) >= i) {
                                footer = footer + "<a href=#>" + i + "</a>&nbsp;";

                            }
                            else {

                            }

                            //footer = footer + "<a href=#>" + i + "</a>&nbsp;";
                        }
                    }
              
                if ((CurrentPage + 1) == totalPages) {
                    footer = footer + "Next &nbsp;";
                    footer = footer + "Last &nbsp;";
                }
                else {
                    footer = footer + "<a href=#>Next</a>&nbsp;";
                    footer = footer + "<a href=#>Last</a>&nbsp;";
                }

                footer = footer + "</div>";
                $("#divFoot").empty();
                $("#divFoot").html(footer);
                return footer;
            }
    </script>
}