Solved

Return Value From DropDownList in MVC using VB

Posted on 2014-02-10
9
1,485 Views
Last Modified: 2014-02-16
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

0
Comment
Question by:shanker702
  • 6
  • 3
9 Comments
 
LVL 96

Expert Comment

by:Bob Learned
Comment Utility
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
 

Author Comment

by:shanker702
Comment Utility
so would I just add the 2 parameters to the function? How do I use those 2 values in the function?
0
 
LVL 96

Accepted Solution

by:
Bob Learned earned 500 total points
Comment Utility
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
 

Author Comment

by:shanker702
Comment Utility
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
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

Author Comment

by:shanker702
Comment Utility
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
 
LVL 96

Expert Comment

by:Bob Learned
Comment Utility
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
 

Author Comment

by:shanker702
Comment Utility
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
 

Author Comment

by:shanker702
Comment Utility
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
 

Author Closing Comment

by:shanker702
Comment Utility
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

Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

Many of us here at EE write code. Many of us write exceptional code; just as many of us write exception-prone code. As we all should know, exceptions are a mechanism for handling errors which are typically out of our control. From database errors, t…
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now