Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I use ViewBag in an .aspx page?

I have to move my UI page from a .cshtml file to an .aspx file. Now I'm having a couple of compiling errors.

First is that 'ViewBag' does not exist in the current context. Can I not use it in .aspx? If not, what is a good substitute?

Second, the .cshtml page had a model declaration:

@model myProject.Models.Navigation

I changed it so that it would work in the .aspx page as follows:

<%@ Import Namespace="myProject.Models" %>

I'm still not sure that's a correct substitute, because I could not include the word "Navigation" without getting an error. And now, in the code where I used to have:

@foreach (myProject.Models.Navigationitem item in Model.navigationItems){...

I've replaced it with:

<% foreach (myProject.Models.Navigationitem item in Model.navigationItems){...

And I get this error:

The name 'Model' does not exist in the current context

Apparently, I'm the only guy who has ever gone from razor to aspx, because there's exactly zilch about it online. Appreciate any help.

like image 708
ericgilchrist Avatar asked Mar 01 '16 00:03

ericgilchrist


1 Answers

WebForms don't usually use a ViewBag, which is just a way to make data available to your View in ASP.Net MVC. With WebForms, a nice way to make data available to your "View" (the aspx page containing the HTML) is to expose a property containing that data.

The MVC way might be to set ViewBag.MyValue = "Some Value"; in your Controller, and reference it in your view with <h1>@ViewBag.MyValue</h1>. To do the equivalent in WebForms you would first define a property in your codebehind:

protected string MyValue { get; set; }

Then, set the value somewhere, perhaps in your Page_Load:

protected void Page_Load (object sender, EventArgs e)
{
    this.MyValue = "Some Value";
}

And write the value on the page using WebForms syntax:

<h1><%= MyValue %></h1>

For your specific case, you don't seem to actually be using ViewBag. That's ok, you can make objects available as properties also:

protected MyProject.Models.Navigation Model { get; set; }

protected void Page_Load (object sender, EventArgs e)
{
    this.Model = SomeMethodThatReturnsModel();
}

With the property defined and the value set, the code you have above for your ASPX should work just fine.

like image 172
gilly3 Avatar answered Sep 20 '22 17:09

gilly3