Return Value From DropDownList in MVC using VB

My partner on a project set up a drop down list that pulls our data from the SQL database to display the content of the drop down. Now the issue is using that data. I have no idea where the data is being returned or posted, tried a million things, just need some help.

Here is the code in the controller for the drop down list
 Function Index() As ActionResult
            Dim List As New List(Of SelectListItem)
            List.Add(New SelectListItem With {.Text = "Select a Year", .Value = 0}) ' Adds first value as "Select a Year"
            Dim valQ = From y In db.gasrevperyears _
                       Select y.year, y.ID _
                       Order By year

            For Each k In valQ
                List.Add(New SelectListItem With {.Text = k.year, .Value = k.ID})
            Next

            ViewData("startDD") = List
            ViewData("endDD") = List

            Return View()

        End Function

Open in new window


Here is the function in the same controller for the charting function that will pass the correct data to the view for the chart.

<AcceptVerbs(HttpVerbs.Post)>
        Function Chart() As ActionResult
            'This is where the code to build the chart should be
            Dim startDD As String
            Dim endDD As String

            Dim List As New List(Of CChartData)
            Dim valQ = From y In db.gasrevperyears
                        Where y.year >= startDD AndAlso endDD <= 2010
                        Select y.year, y.amount
                        Order By year

            For Each k In valQ
                List.Add(New CChartData With {.Year = k.year, .ValueS1 = k.amount})
            Next


            Return View(List)
        End Function

Open in new window


Here is the implementation of the drop down lists in our view

@ModelType gasrevperyear

@Code
    ViewData("Title") = "Gasoline Revenue Per Year"
End Code

<div class="row-fluid">
   <div class="span12">
       <h2>Gasoline Revenue Per Year</h2>
   </div>
   @Using Html.BeginForm("Chart", "usergasrevperyear", method:= FormMethod.Post)
        @Html.ValidationSummary(True)
   @<fieldset>
        <legend>Please Select Graph Parameters</legend>

   <div class="row-fluid">
       <div class="span6">
       </div>
   </div>
   <div class="row-fluid">
       <div class="span6">
            <p>From Year</p>
                <div class="span6">
                    @Html.DropDownListFor(Function(model) model.year, ViewData("startDD"))
                </div>
        </div>
    </div>
    <div class="row-fluid">
        <div class="span6">
            <p>To Year</p>
            <div class="span6">
                @Html.DropDownListFor(Function(model) model.year, ViewData("endDD"))
            </div>
        </div>
    </div>
    <div class="span2 offset3">
        <button id="submit" name="submit" class="btn-btn-primary">Submit</button>
    </div>
    </fieldset>
    End Using
</div>

Open in new window

shanker702Asked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
Bob LearnedConnect With a Mentor Commented:
When you use a POST to a method, the Razor engine tries to match up form values to the parameters, as described in this article:

6 Tips for ASP.NET MVC Model Binding
http://odetocode.com/blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspx

<AcceptVerbs(HttpVerbs.Post)> _
Public Function Create(newRecipe As Recipe) As ActionResult
	' ...

	Return View()
End Function

Open in new window


Since you are using a model with the DropDownList, the engine will generate arguments that can be bound to that model type as a parameter to the Post method (Recipe in the example above).
0
 
Bob LearnedCommented:
I see that you are using the Chart action method, on the usergasrevperyearController, according to this code:

Using Html.BeginForm("Chart", "usergasrevperyear", method:= FormMethod.Post)

Open in new window


You would need a parameter for the Chart method to accept a value from the submit and post-back.
0
 
shanker702Author Commented:
so would I just add the 2 parameters to the function? How do I use those 2 values in the function?
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
shanker702Author Commented:
So would I try using the FormCollection parameter? and that will allow me to take what i need from the form once its submitted?
0
 
shanker702Author Commented:
Ok, so I created a class for the data, and now my chart function looks like:
Function Chart(chartData As DropDownData) As ActionResult
            'This is where the code to build the chart should be

            Dim startDD As Integer
            Dim endDD As Integer

            startDD = chartData.startDD

            endDD = chartData.endDD



            Dim List As New List(Of CChartData)
            Dim valQ = From y In db.gasrevperyears
                        Where y.year >= startDD AndAlso endDD <= 2010
                        Select y.year, y.amount
                        Order By year

            For Each k In valQ
                List.Add(New CChartData With {.Year = k.year, .ValueS1 = k.amount})
            Next


            Return View(List)
        End Function

Open in new window


So how do i render the drop downs in my form so that their values bind to the properties of the new object being created as a parameter
0
 
Bob LearnedCommented:
If you are talking about this drop down:

 @Html.DropDownListFor(Function(model) model.year, ViewData("endDD"))

then, the argument should be the same type as the model.  Then, it will assign the values from the post-back to that argument.

You don't have to do anything else.
0
 
shanker702Author Commented:
So I changed it to this  
 <AcceptVerbs(HttpVerbs.Post)>
        Function Chart(startDD As gasrevperyear, endDD As gasrevperyear) As ActionResult
            'This is where the code to build the chart should be

            Dim startDD1 As String
            Dim endDD1 As String

            startDD1 = startDD.year
            endDD1 = endDD.year

Open in new window


But it still isn't getting anything from the post data from the drop down you referenced, and that's the same model type now.
0
 
shanker702Author Commented:
I finally figured it out thanks to you. Thanks a ton for pointing me in the right direction, I was looking at it all wrong
0
 
shanker702Author Commented:
I finally figured it out thanks to you. Thanks a ton for pointing me in the right direction, I was looking at it all wrong
0
All Courses

From novice to tech pro — start learning today.