Go through previous tutorial use business library as modal before preceding this
tutorial. In Last tutorial we generated a student data modal
Step(1) : -In this Modal if i click on “Create New”
link it goes to “http://localhost:12542/Student/Create”
url , Means it expect Create method in Student controller but it didn’t get
that so it gives exception , So get rid of this problem let’s write a “Create”
method
using System;
using
System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using BusinessLayer;
namespace
MvcApplication2.Controllers
{
public
class StudentController
: Controller
{
public ActionResult
Index()
{
BusinessLogic BL = new
BusinessLogic();
List<Student>
student = BL.student.ToList();
return View(student);
}
[HttpGet]
public ActionResult
Create()
{
return View();
}
}
}
|
Here if we see that this “Create” method is designed
with “[HttpGet]”
means this method responds only for the Get request or we can say that when
user will come to this “http://localhost:12542/Student/Create”
url. It will not work for Post method.
Step(2) : - Let’s create a view for this “Create Method
by right click on this method and add a view
Here modal class as “Student” and Scaffold template as
Create ,this will automatically create a view. In generated view code make some
changes for changing “Gender” textbox to as Dropdown box , So View code will
like following code
At this time if you will run your application and click on “Create New” Link it will give error for @Scripts.Render("~/bundles/jqueryval")
So before run this application remove this line from
your view code (it will at last) ,We will discuss on this in later tutorial.
So the view code will be
@model BusinessLayer.Student
@{
ViewBag.Title = "Create";
}
<h2>
Create</h2>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Student</legend>
<div class="editor-label">
@Html.LabelFor(model
=> model.StudentName)
</div>
<div class="editor-field">
@Html.EditorFor(model
=> model.StudentName)
@Html.ValidationMessageFor(model
=> model.StudentName)
</div>
<div class="editor-label">
@Html.LabelFor(model
=> model.Gender)
</div>
<div class="editor-field">
@Html.DropDownList("Gender", new
List<SelectListItem>
{
new SelectListItem { Text = "Male",
Value="Male" },
new SelectListItem { Text = "Female",
Value="Female" }
}, "Select Gender")
</div>
<div class="editor-label">
@Html.LabelFor(model
=> model.StudentClass)
</div>
<div class="editor-field">
@Html.EditorFor(model
=> model.StudentClass)
@Html.ValidationMessageFor(model
=> model.StudentClass)
</div>
<p>
<input type="submit"
value="Create"
/>
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back
to List", "Index")
</div>
|
Step(3): - when you will run your application and click
on “create new” then o/p will be
Step(4) : Here in above o/p or screen if we click on Create button ,then it gives error
that resource not found because we didn’t
create method for this. Means we have create [HttpPost] method.
Let’s create a
stored procedure for insertion data into database table
Create procedure
insertStdDetail
@StudentName nvarchar(50),
@Gender nvarchar (10),
@SchoolName nvarchar
(50)
as
Begin
Insert into dbo.StudentInfo (StudentName,
Gender, SchoolName )
Values (@StudentName, @Gender,
@SchoolName)
End
|
Step(5):- Go to BusinessLayer library project and in “BusinessLogic.cs” Class write
a method for inserting value in database. For that take the following code
public void InsertStudentDetail(Student
student)
{
string connectionString =
ConfigurationManager.ConnectionStrings["Connect"].ConnectionString;
using (SqlConnection
con = new SqlConnection(connectionString))
{
SqlCommand cmd = new
SqlCommand("insertStdDetail",
con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter
paramName = new SqlParameter();
paramName.ParameterName = "@StudentName";
paramName.Value = student.StudentName;
cmd.Parameters.Add(paramName);
SqlParameter paramGender = new SqlParameter();
paramGender.ParameterName = "@Gender";
paramGender.Value = student.Gender;
cmd.Parameters.Add(paramGender);
SqlParameter paramCity = new SqlParameter();
paramCity.ParameterName
= "@SchoolName";
paramCity.Value = student.StudentClass;
cmd.Parameters.Add(paramCity);
con.Open();
cmd.ExecuteNonQuery();
}
}
|
Step(6): -Write a post method in Student controller
class of Create method , Take the following code
using System;
using
System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using BusinessLayer;
namespace
MvcApplication2.Controllers
{
public
class StudentController
: Controller
{
public ActionResult
Index()
{
BusinessLogic BL = new
BusinessLogic();
List<Student>
student = BL.student.ToList();
return View(student);
}
[HttpGet]
public ActionResult
Create()
{
return View();
}
//Post
Method for inserting data into database
[HttpPost]
public ActionResult
Create(FormCollection formCollection)
{
Student student = new
Student();
student.StudentName = formCollection["StudentName"];
student.Gender =
formCollection["Gender"];
student.StudentClass = formCollection["StudentClass"];
BusinessLogic BL =new
BusinessLogic();
BL.InsertStudentDetail(student);
return RedirectToAction("Index");
}
}
}
|
We can create this method using parameters
[HttpPost]
public ActionResult Create(string name, string gender, string studentClass) { Student student = new Student(); student.StudentName = name; student.Gender = gender; student.StudentClass = studentClass; BusinessLogic BL =new BusinessLogic();
BL.InsertStudentDetail(student);
return RedirectToAction("Index");
} |
Basically we use “FormcCllection for getting Key and
values.
Step(7):- Click on Create new link you will see screen
and fill value and click on “Create” button.
After click on button it redirect to main page with
updated student detail.