ASP.NET MVC View to Controller Operation:-
We can pass View Data (Html form or razor form elements ) using Four different ways
1) using FormCollection:-
FormCollection is a predefined class that is used to store data using dictionary pattern means key=>value pair, the key will be HTML form element name, and value will be data of HTML form element.
Step for FormCollection Object:-
1) Create Controller and define two different method
First Load Method or GET Method:-
public ActionResult Index()
{
return View()
}
Action Method or POST Method
[HttpPost]
public ActionResult Index(FormCollection obj)
{
return View()
}
Create View on right-click on Getting method:- it will create index.cshtml
Write following code
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<form method="post">
<input type="text" name="txtp" placeholder="Enter P" />
<br />
<br />
<input type="text" name="txtr" placeholder="Enter Rate" />
<br />
<br />
<input type="text" name="txtt" placeholder="Enter Time" />
<br />
<br />
<input type="submit" name="btnsubmit" value="Click" />
</form>
@ViewBag.Data
</div>
</body>
</html>
modify the code of Action Method:-
[HttpPost]
public ActionResult Index(FormCollection obj)
{
float si = float.Parse(obj["txtp"].ToString())*float.Parse(obj["txtr"].ToString())*float.Parse(obj["txtt"].ToString())/100;
ViewBag.Data = "result is " + si;
return View();
}
Request Object is the reference of HttpRequest class, It will directly get data from the request object and assign it into a variable, if we want to provide a different action method name for HttpGet and HttpPost then we can prefer Request Object.
Create Controller with Two different methods for HttpGet and HttpPost:-
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult SwapCode() //using Request
{
return View();
}
Create a view on right-click on GET method and write following code:-
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<form action="swap/SwapCode" method="post">
<input type="text" name="txtnum1" placeholder="Enter First Number" />
<br />
<br />
<input type="text" name="txtnum2" placeholder="Enter second number" />
<br />
<br />
<input type="submit" name="btnsubmit" value="Click" />
</form>
</div>
</body>
</html>
Modify Action Method Code:-
[HttpPost]
public ActionResult SwapCode() //using Request
{
int a = int.Parse(Request["txtnum1"]);
int b = int.Parse(Request["txtnum2"]);
a = a + b;
b = a - b;
a = a - b;
ViewBag.data = "a=" + a + "b=" + b;
return View();
}
We can create parametrized Action Method which will receive data of Form Element using Element name.
Step for using Parameters:-
Create Load Action Method:-
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult SwapCode() //using Request
{
return View();
}
Create view on right click on Get method
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<form action="swap/SwapCode" method="post">
<input type="text" name="txtnum1" placeholder="Enter First Number" />
<br />
<br />
<input type="text" name="txtnum2" placeholder="Enter second number" />
<br />
<br />
<input type="submit" name="btnsubmit" value="Click" />
</form>
</div>
</body>
</html>
4) using Model Object or MVC Approach:-
It provides an MVC Design pattern we create model class according to form requirement. The model class will be bind by view using a strongly typed view object pattern.
Create two different methods in the controller for Get and POST, Create Model Object as a parameter in the POST method, and define code.
Controller Object will load dynamic view and get data of view under action method.
Step for Model Object:-
1) Create Controller with HttpGet method
Step for using Parameters:-
Create Load Action Method:-
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult SwapCode() //using Request
{
return View();
}
Create view on right click on Get method
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<form action="swap/SwapCode" method="post">
<input type="text" name="txtnum1" placeholder="Enter First Number" />
<br />
<br />
<input type="text" name="txtnum2" placeholder="Enter second number" />
<br />
<br />
<input type="submit" name="btnsubmit" value="Click" />
</form>
</div>
</body>
</html>
modify code of Action Method:-
[HttpPost]
public ActionResult SwapCode(String txtnum1,String txtnum2) //using Request
{
int a = int.Parse(txtnum1);
int b = int.Parse(txtnum2);
a = a + b;
b = a - b;
a = a - b;
ViewBag.data = "a=" + a + "<br>b=" + b;
return View();
}
It provides an MVC Design pattern we create model class according to form requirement. The model class will be bind by view using a strongly typed view object pattern.
Create two different methods in the controller for Get and POST, Create Model Object as a parameter in the POST method, and define code.
Controller Object will load dynamic view and get data of view under action method.
Step for Model Object:-
1) Create Controller with HttpGet method
public class SIController: Controller
{
//
// GET: /SI/
public ActionResult Index()
{
return View();
}
}
2) Create Model Class using right-click on Model Folder
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace BasicMVCExample.Models
{
public class SICalc
{
public float P { get; set; }
public float R { get; set; }
public float T { get; set; }
}
}
3) Create Action Method under Controller then create Strongly typed view on right-click on Action Method using Template Create Option
[HttpPost]
public ActionResult Index(SICalc obj)
{
return View();
}
4) Right-click on Get method and add Model Object under view.
Automatic generated View by Create Template It is called Strongly typed view:-
@model BasicMVCExample.Models.SICalc
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>SICalc</legend>
<div class="editor-label">
@Html.LabelFor(model => model.P)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.P)
@Html.ValidationMessageFor(model => model.P)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.R)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.R)
@Html.ValidationMessageFor(model => model.R)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.T)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.T)
@Html.ValidationMessageFor(model => model.T)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@ViewBag.result
</div>
</body>
</html>
5) Modify Action Method Code and Write program
[HttpPost]
public ActionResult Index(SICalc obj)
{
ViewBag.result = (obj.P * obj.R * obj.T) / 100;
return View();
}

POST Answer of Questions and ASK to Doubt