0

I will like to pass the variable "totalCount" to my view and let this display in a label or text area when my view loads. Here is my code below. How can I achieve this in Mvc 3?

Here is my class

public class person
    {

        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Address { get; set; }

        public person(int myId, string myFirstname, string myLastname, string myAddress)
        {
            Id = myId;
            FirstName = myFirstname;
            LastName = myLastname;
            Address = myAddress;
        }       
    }

Here is my controller ....

namespace WriteObjectToDb.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            int result;
            List<person> mn = new List<person>();
            mn.Add(new person(1,"john", "adebayo", "shobanjo close jericho"));
            mn.Add(new person(2, "david", "johnson", "ibada close"));
            mn.Add(new person(3, "bayo", "olomale", "oluyole estate ringroad"));
            result =  WriteToDb(mn);

            return View(mn);

        }

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


        /// <summary>
        /// 
        /// </summary>
        /// <param name="mn"></param>
        /// <returns></returns>
        private int WriteToDb(List<person> mn)
        {
            int totalCount;
            string connect = string.Empty;
            using (TransactionScope scope = new TransactionScope())
            {
                string sqlIns = "insert into table(firstname,lastname,address) values(@firstname,@lastname,@address)";
                SqlConnection cn = new SqlConnection(connect);
                SqlCommand cmdIns = new SqlCommand(sqlIns,cn);

                for(int i=0;i<mn.Count;i++)
                {
                    cmdIns.Parameters.AddWithValue("@firstname",mn[i].FirstName);
                    cmdIns.Parameters.AddWithValue("@lastname",mn[i].LastName);
                    cmdIns.Parameters.AddWithValue("@address",mn[i].Address);
                    cmdIns.ExecuteNonQuery();
                    cmdIns.Parameters.Clear();
                }
                scope.Complete();
                totalCount = mn.Count();
                return totalCount;
            }

        }

    }
}

Here is my view.....

@model IEnumerable<WriteObjectToDb.Models.person>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            FirstName
        </th>
        <th>
            LastName
        </th>
        <th>
            Address
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.FirstName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.LastName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Address)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
            @Html.ActionLink("Details", "Details", new { id=item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.Id })
        </td>
    </tr>
}

</table>
tereško
  • 58,060
  • 25
  • 98
  • 150
Baba
  • 2,059
  • 8
  • 48
  • 81

3 Answers3

2

Store it in the ViewBag:

totalCount = 10;
ViewBag.TotalCount = totalCount;

Then in your view:

<span>@ViewBag.TotalCount</span>
DGibbs
  • 14,316
  • 7
  • 44
  • 83
0

if TotalCount is just the count of Person objects in your model you can just use Model.Count.

To fully answer your question in the general case: you need to create a ViewModel class that contains all the data that you want to pass to the view, in your case List People and int TotalCount. Pass that view model to the view and access it's properties inside the view:

class MyPageNameViewModel
{
    public int TotalCount { get; set; }

    public List<Person> People { get; set; }

}
Z .
  • 12,657
  • 1
  • 31
  • 56
  • Thanks. I like this approach. How do I now pass the value of the TotalCount to a label on the view or text area. I want the count to show. – Baba Jun 24 '13 at 13:23
  • @Html.DisplayFor(model => model.TotalCount) – Z . Jun 24 '13 at 13:25
0

You can create new viewmodel class and add new property to it:

View model:

public class PersonsViewModel {
    public List<person> Persons { get; set; }
    public Int32 TotalCount{ get; set; }
}

Action:

 public ActionResult Index()
    {
        int result;
        var model = new PersonsViewModel();
        List<person> mn = new List<person>();
        mn.Add(new person(1,"john", "adebayo", "shobanjo close jericho"));
        mn.Add(new person(2, "david", "johnson", "ibada close"));
        mn.Add(new person(3, "bayo", "olomale", "oluyole estate ringroad"));
        result =  WriteToDb(mn);
        model.Persons = mn;
        model.TotalCount = 42; // your variable

        return View(model);

    }

View:

@model PersonsViewModel

@{
    ViewBag.Title = "Index";
}

<h2>Total : @Model.TotalCount</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            FirstName
        </th>
        <th>
            LastName
        </th>
        <th>
            Address
        </th>
        <th></th>
    </tr>

@foreach (var item in Model.Persons) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.FirstName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.LastName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Address)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
            @Html.ActionLink("Details", "Details", new { id=item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.Id })
        </td>
    </tr>
}
</table>
YD1m
  • 5,845
  • 2
  • 19
  • 23