11

I am developing an application where I need to pass the value of username from a controller to a view. i tried ViewData as given in http://msdn.microsoft.com/en-us/library/system.web.mvc.viewdatadictionary.aspx

My code in controller is

public ActionResult Index(string UserName, string Password)
{
        ViewData["UserName"] = UserName;
        return View();
}

where username and password are obtained from another form.

And the code in the view is

@{
    ViewBag.Title = "Index";  
}
<h2>Index</h2>
<%= ViewData["UserName"] %>

But when I run this code, the display shows <%= ViewData["UserName"] %> instead of the actual username say, for example "XYZ".

How should I display the actual UserName?

Thank you very much in advance for your help.

Lavanya Mohan
  • 1,496
  • 7
  • 28
  • 39

3 Answers3

13

You're using razor syntax here but you're trying to mix it with older asp.net syntax, use

@ViewData["UserName"] 

instead

Also, normally you wouldn't use the view bag to pass data to the view. Standard practice is to create a model (a standard class) with all of the bits of data your View (page) wants then pass that model to the view from your controller (return View(myModel);)

To do this you also need to declare the type of model you're using in your view

@model Full.Namespace.To.Your.MyModel

read http://msdn.microsoft.com/en-us/gg618479 for a basic mvc models tutorial

Travis Heeter
  • 13,002
  • 13
  • 87
  • 129
undefined
  • 33,537
  • 22
  • 129
  • 198
6

It appears that you're using the Razor View Engine rather than the Web Forms View Engine. Try the following instead:

@{ 
    ViewBag.Title = "Index";   
} 
<h2>Index</h2> 
@ViewData["UserName"]
Phil Klein
  • 7,344
  • 3
  • 30
  • 33
0

The 'ViewBag' is a holdover from MVC2. MVC3 development should use strongly typed 'ViewModel's.

Steven Licht
  • 760
  • 4
  • 5