In this article I will explain with an example, how to pass data from View to Controller using ViewBag in ASP.Net MVC Razor.
ViewBag itself cannot be used to send data from View to Controller and hence we need to make use of Form and Hidden Field in order to pass data from View to Controller in ASP.Net MVC Razor.
Note: For beginners in ASP.Net MVC, please refer my article ASP.Net MVC Hello World Tutorial with Sample Program example.
 
 
Model
Following is a Model class named PersonModel with a property i.e. Name.
public class PersonModel
{
    ///<summary>
    /// Gets or sets Name.
    ///</summary>
    public string Name { get; set; }
}
 
 
Controller
The Controller consists of two Action methods.
Action method for handling GET operation
Inside this Action method, an object of PersonModel class is created and is returned to the View. The value of the Name property will be set in the Hidden Field created using Html.HiddenFor helper function.
The value of the Country is set in a ViewBag object which will be later set in the Hidden Field created using Html.Hidden helper function.
 
Action method for handling POST operation
Inside this Action method, the value of the Hidden Field created using the Html.HiddenFor helper function is fetched using the PersonModel class.
And the value of the Hidden Field created using the Html.Hidden helper function is fetched using the Request.Form collection.
public class HomeController : Controller
{
    // GET: Home
    public ActionResult Index()
    {
        PersonModel person = new PersonModel
        {
            Name = "Mudassar Khan"
        };
 
        ViewBag.Country = "India";
        return View(person);
    }
 
    [HttpPost]
    public ActionResult Index(PersonModel person)
    {
        string name = person.Name;
        string country = Request.Form["Country"];
        return View();
    }
}
 
 
View
Inside the View, in the very first line the PersonModel class is declared as Model for the View.
The View consists of an HTML Form which has been created using the Html.BeginForm method with the following parameters.
ActionName – Name of the Action. In this case the name is Index.
ControllerName – Name of the Controller. In this case the name is Home.
FormMethod – It specifies the Form Method i.e. GET or POST. In this case it will be set to POST.
There are two Hidden Fields. The Hidden Field for the Name value is created using Html.HiddenFor function while the Hidden Field for the Country value is created using Html.Hidden helper function and it is assigned value using ViewBag object.
There’s also a Submit Button at the end of the Form and when the Button is clicked, the Form is submitted.
@model HiddenField_MVC.Models.PersonModel
 
@{
    Layout = null;
}
 
<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width"/>
    <title>Index</title>
</head>
<body>
    @using (Html.BeginForm("Index", "Home", FormMethod.Post))
    {
        @Html.HiddenFor(m => m.Name)
        @Html.Hidden("Country", (object)ViewBag.Country)
        <input type="submit" value="Submit"/>
    }
</body>
</html>
 
 
Screenshot
ASP.Net MVC: Pass data from View to Controller using ViewBag
 
 
Downloads