user1418667
user1418667

Reputation: 21

mvc passing data between controller and view

I am developing an application. I have created a view and a controller. The view has a button, on the click of which I am supposed to do database operations. I have put the database operations in the model, I am creating the object of model in the controller. On clicking the button the action is handled by a method in the controller, and the object of the model is created to get the records from the database. I would like to know if there is any way to display this data in the view.Is the approach correct or the view is supposed to interact with model directly to get the data. Following is the code in controller that gets invoked on the button click

public ActionResult getRecord()
{
DataModel f_DM = new DataModel();
DataTable f_DT =  f_DM.getRecord();

return View();
}

DataModel is the model class with simply a method "getRecord". Any help will be highly appreciated.

I would like to add that i am using vs2010 and mvc4

Regards

Upvotes: 0

Views: 403

Answers (2)

IT ppl
IT ppl

Reputation: 2647

you should write the logic of retrieving data in your controller. Store all your data in view model and pass it to the view.

for eg.

Model

namespace Mvc4App.Models
{
  public class Product
  {
    public string Name { get; set; }
  }
  public class ProductViewModel
  {
    public Product Product { get; set; }
    public string SalesPerson { get; set; }
  }
}

Controller

public class ProductController : Controller
{
  public ActionResult Info()
  {
    ProductViewModel ProductViewModel = new ProductViewModel
    {
      Product = new Product { Name = "Toy" },
      SalesPerson = "Homer Simpson"
    };
    return View(ProductViewModel);
  }
}

View

@model Mvc4App.Models.ProductViewModel
@{ ViewBag.Title = "Info"; }
<h2>Product: @Model.Product.Name</h2>
<p>Sold by: @Model.SalesPerson</p>

This is the best known practice to pass data from controller to the view.

you may use other techniques also like,

1. ViewData 
2. ViewBag 
3. TempData 
4. View Model Object  
5. Strongly-typed View Model Object

Upvotes: 1

Evgeniy Labunskiy
Evgeniy Labunskiy

Reputation: 2042

Yes, it's possible, but actually now very logical way to to this.

Lets follow your way. You have some View were you have a button, that will trigger this action.

For ex:

public ActionResult Index()
{
return View();
}

Inside view you can have a Ajax link, that will trigget your getRecord method:

<div id="GetDataDiv"></div>
<div>
@Ajax.ActionLink("Get Record", "getRecord", "ControllerName", null, new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "GetDataDiv" })
</div> 

In the getRecord method you should have:

public ActionResult getRecord()
{
DataModel f_DM = new DataModel();
DataTable f_DT =  f_DM.getRecord();

return PartialView(f_DT);
}

And in View it should be:

@model DataTable

@Model.PropertyOne @Model.PropertyTwo

It should works for you. Actually same exaple here: http://www.dotnetpools.com/Article/ArticleDetiail/?articleId=151

Upvotes: 0

Related Questions