Introduction :
ASP.NET MVC makes use of the MVC design pattern and
the result is far different at code level. ASP.NET MVC divides the entire
processing logic into three distinct parts namely model, view and controller. In
the process views (that represent UI under MVC architecture) needed to sacrifice
three important features of web forms: Post backs, View State and rich event
model. Let's quickly see why this sacrifice is necessary. Remember that in the
following sections when I say "web form" I mean the original web form model and
when I say "MVC web page" I mean MVC based web forms, though technically they
belong to the same inheritance chain.
To illustrate how we can use ASP.NET server controls in an ASP.NET MVC web pages we will develop a sample application. In this application we will make use of the GridView and Details View controls. The application adds, edits, deletes and selects records from an Employees table.
Step 1:
- Go to file -> New->Projects.
- Open ASP.NET MVC 2 Empty Web
Application.
Step 2:
- Right click on the App_Data Folder ->Add
New Item ->SQL Server Database.
- After attach a database. Right click of
database and add a table name is "Employee".
- The fields of these table
"Id,Name,Salary".
- Add some values in a table for testing
purposes.
Step 3:
- Then add a new LINQ to SQL Classes (.dbml)
file to Models folder. Drag and drop Employees table onto its design surface
from the Server Explorer. Doing so will create a LINQ to SQL class
(Employee) for Employees table. This class will form the model for our MVC
pages.
- Right click of Model Folder ->
Add ->Add New Items-> Add LINQ to SQL Classes (.dbml).
Step 4 :
- Right Click of View Folder->Add a files.
- Name is "Index".
Code :
<%@
Page Language="C#"
Inherits="System.Web.Mvc.ViewPage"
%>
<!DOCTYPE
html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script
runat="server">
protected
void Page_Load(object sender,
EventArgs e)
{
GridView1.DataSource = ViewData["emplist"];
GridView1.DataBind();
}
</script>
<html>
<head>
<title>
</title>
</head>
<body>
<form
id="form1"
runat="server">
<asp:GridView
ID="GridView1"
runat="server"
EnableModelValidation="True">
<Columns>
<asp:HyperLinkField
HeaderText="Edit"
DataNavigateUrlFields="Id"
DataNavigateUrlFormatString="~/Employee/ShowUpdateView/{0}"
Text="Edit"
></asp:HyperLinkField>
<asp:HyperLinkField
DataNavigateUrlFields="Id"
DataNavigateUrlFormatString="~/Employee/Delete/{0}"
Text="Delete"
>
</asp:HyperLinkField>
<asp:TemplateField
HeaderText="Id">
<ItemTemplate>
<asp:Label
ID="Label1"
runat="server"
Text='<%#
Bind("Id") %>'></asp:Label>
</ItemTemplate></asp:TemplateField>
<asp:TemplateField
HeaderText="Name">
<ItemTemplate>
<asp:Label
ID="Label1"
runat="server"
Text='<%#
Bind("Name") %>'></asp:Label>
</ItemTemplate></asp:TemplateField>
</Columns>
</asp:GridView>
<div>
</div>
</form>
</body></html>
Step 5 :
- Right click on the Controllers Folder -> add
Controllers name as "EmployeeControllers".
Code:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using System.Web;
using
System.Web.Mvc;
using
MvcApplication6.Models;
namespace
MvcApplication6.Controllers
{
public class
EmployeeController :
Controller
{
public
ActionResult Index()
{
DataClasses1DataContext db =
new
DataClasses1DataContext();
IQueryable<Employee> emplist =
from rows in
db.Employees select rows;
ViewData["emplist"] = emplist;
return View();
}
public
ActionResult ShowInsertView()
{
return View();
}
[HttpPost]
public
ActionResult Insert(FormCollection
collection)
{
DataClasses1DataContext db =
new
DataClasses1DataContext();
Employee item =
new Employee();
item.Name = collection["DetailsView1$txtName"];
item.Notes = collection["DetailsView1$txtNotes"];
db.Employees.InsertOnSubmit(item);
db.SubmitChanges();
return RedirectToAction("Index");
}
public
ActionResult ShowUpdateView(int id)
{
DataClasses1DataContext db =
new
DataClasses1DataContext();
var temp =
from item in
db.Employees
where item.Id == id
select item;
ViewData["emplist"] =
temp.ToList();
return View();
}
[HttpPost]
public
ActionResult Update(int id,
FormCollection collection)
{
DataClasses1DataContext db =
new
DataClasses1DataContext();
var temp =
from item in
db.Employee where item.Id == id
select item;
temp.First().Name = collection["DetailsView1$txtName"];
temp.First().Notes = collection["DetailsView1$txtNotes"];
db.SubmitChanges();
return RedirectToAction("Index");
}
public
ActionResult Delete(int id)
{
DataClasses1DataContext db =
new
DataClasses1DataContext();
var temp =
from item in
db.Employees where item.Id == id
select item;
db.Employees.DeleteOnSubmit(temp.First());
db.SubmitChanges();
return RedirectToAction("Index");
}
}
}
Step 5 :
Code :
<%@
Page Language="C#"
Inherits="System.Web.Mvc.ViewPage"
%>
<!DOCTYPE
html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script
runat="server">
protected
void Page_Load(object sender,
EventArgs e)
{
object emplist = ViewData["emplist"];
DetailsView1.DataSource = emplist;
DetailsView1.DataBind();
}
</script>
<html
xmlns="http://www.w3.org/1999/xhtml"
>
<head
runat="server">
<title>ShowInsertView</title>
</head>
<body>
<form
id="form1"
runat="server">
<asp:DetailsView
ID="DetailsView1"
runat="server"
Height="50px"
Width="125px"
DataSourceID="SqlDataSource1"
EnableModelValidation="True">
<Fields>
<asp:TemplateField
HeaderText="Name :">
<InsertItemTemplate>
<asp:TextBox
ID="txtName"
runat="server"
Text='<%#
Bind("Name") %>'
/>
</InsertItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="Notes :">
<InsertItemTemplate>
<asp:TextBox
ID="txtNotes"
runat="server"
Text='<%#
Bind("Notes") %>'
Rows="3"
TextMode="MultiLine"></asp:TextBox>
</InsertItemTemplate>
</asp:TemplateField>
</Fields>
<FooterTemplate>
<asp:Button
ID="Button1"
runat="server"
PostBackUrl="~/Employee/Insert"
Text="Save"
Width="75px"
/>
</FooterTemplate>
</asp:DetailsView>
<asp:SqlDataSource
ID="SqlDataSource1"
runat="server"
ConnectionString="<%$
ConnectionStrings:Database1ConnectionString %>"
SelectCommand="SELECT
[Id], [Name], [Notes] FROM [Employees]">
</asp:SqlDataSource>
<div>
</div>
</form>
</body>
</html>
Step 6:
Code :
<%@
Page Language="C#"
Inherits="System.Web.Mvc.ViewPage"
%>
<!DOCTYPE
html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
>
<head
runat="server">
<title>ShowUpdateView</title>
</head>
<body>
<form
id="form1"
runat="server">
<div>
<asp:DetailsView
ID="DetailsView1"
runat="server"
DefaultMode="Edit"
Height="50px"
Width="125px">
<Fields>
<asp:TemplateField
HeaderText="Id :">
<EditItemTemplate>
<asp:Label
ID="Label1"
runat="server"
Text='<%#
Bind("Id") %>'></asp:Label>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="Name :">
<EditItemTemplate>
<asp:TextBox
ID="txtName"
runat="server"
Text='<%#
Bind("Name") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="Notes :">
<EditItemTemplate>
<asp:TextBox
ID="txtNotes"
runat="server"
Text='<%#
Bind("Notes") %>'
Rows="3"
TextMode="MultiLine"></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
</Fields>
<FooterTemplate>
<asp:Button
ID="Button1"
runat="server"
PostBackUrl='<%#
Eval("Id","~/Employee/Update/{0}") %>'
Text="Save"
Width="75px"
/>
</FooterTemplate>
</asp:DetailsView>
</div>
</form>
</body></html>
Output :
- Press f5 and see the output.