In this article we are going to see how to submit a form to the controller,so let we take a example add a new employee to the list and submit it.
Create a Employee Controller and action in a name of Create which is mention as HttpGet that means it is a Get Request so it is called at the load time, Now for this action create a View.
C#
HTML
For Post the form we have to create a another action with same name with HttpPost as Attribute.
C#
Businnes Logic:
SQL SCRIPT :
When the Form is submitted the values and controls are submitted as form collection to the action, so each and every control is stored as Key value pairs.
Create a Employee Controller and action in a name of Create which is mention as HttpGet that means it is a Get Request so it is called at the load time, Now for this action create a View.
C#
[HttpGet]
public ActionResult
Create()
{
return View();
}
HTML
@model TestingMvc.Models.Employee
@{
ViewBag.Title = "Create
Employee";
}
<h2>
Create Employee</h2>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset style="width:300px">
<legend>Employee</legend>
<br />
<div class="editor-label">
@Html.LabelFor(m => m.EmployeeName)
</div>
<div class="editor-field">
@Html.EditorFor(m => m.EmployeeName)
@Html.ValidationMessageFor(m=>m.EmployeeName)
</div>
<div class="editor-label">
@Html.LabelFor(x => x.Country)
</div>
<div class="editor-field">
@Html.EditorFor(x => x.Country)
@Html.ValidationMessageFor(x=>x.Country)
</div>
<div class="editor-label">
@Html.LabelFor(x => x.DepartmentId, "Department")
</div>
<div class="editor-field">
@Html.DropDownList("Departments",
new List<SelectListItem>(){
new SelectListItem(){Text="TECH",Value="1"},
new SelectListItem(){Text="HR",Value="2"},
new SelectListItem(){Text="Finance",Value="3"}
}, "Select
Department")
@Html.ValidationMessageFor(x=>x.DepartmentId)
</div>
<div class="editor-label">
@Html.LabelFor(x=>x.Married)
</div>
<div class="editor-field">
@Html.DropDownList("Married",new List<SelectListItem>(){
new SelectListItem(){Text="Yes",Value="YES"},
new SelectListItem(){Text="No",Value="NO"}
})
@Html.ValidationMessageFor(x=>x.Married)
</div>
<br />
<input type="submit" value="Create" />
</fieldset>
}
<br />
@Html.ActionLink("Back to List","Index","Department")For Post the form we have to create a another action with same name with HttpPost as Attribute.
C#
[HttpPost]
public ActionResult
Create(FormCollection form)
{
BusinessLayer bl = new BusinessLayer();
bl.Create(form["EmployeeName"],
form["Country"], form["Married"], int.Parse(form["Departments"]));
return RedirectToAction("Details",
new { id=int.Parse(form["Departments"])});
}
public class BusLayer
{
public void Create(string name, string
country, string married, int departmentid)
{
SqlConnection con = new
SqlConnection(ConfigurationManager.ConnectionStrings["EmployeeDbContext"].ConnectionString);
con.Open();
try
{
SqlCommand
cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "EMP_ADD";
cmd.Parameters.Add(new SqlParameter("@NAME",
name));
cmd.Parameters.Add(new SqlParameter("@DEPT",
departmentid));
cmd.Parameters.Add(new SqlParameter("@COUNTRY",
country));
cmd.Parameters.Add(new SqlParameter("@MARRIED",
married));
cmd.ExecuteNonQuery();
}
finally
{
con.Close();
}
}
}
CREATE PROCEDURE EMP_ADD(
@NAME VARCHAR(100),
@DEPT VARCHAR(100),
@COUNTRY VARCHAR(20),
@MARRIED VARCHAR(4)
)
AS
BEGIN
SET NOCOUNT ON
INSERT INTO
EMPTABLE(
NAME,
DEPTID,
COUNTRY,
MARRIED
)
VALUES(
UPPER(@NAME),
@DEPT,
UPPER(@COUNTRY),
UPPER(@MARRIED)
)
SET NOCOUNT OFF
END
When the Form is submitted the values and controls are submitted as form collection to the action, so each and every control is stored as Key value pairs.
No comments:
Post a Comment