Get the text from Html.DropdownListFor....MVC3

I have a model:

public class DocumentModel
{
    public int TypeID { get; set; }
    public List<SelectListItem> DocumentTypes { get; set; }
}

I have a view:

  @Html.DropDownListFor(x => x.TypeID, Model.DocumentTypes, "- please select -")

I populate my drop down

        var model = new DocumentModel();
        model.DocumentTypes = GetDocumentTypes(); 

private static List<SelectListItem> GetDocumentTypes()
    {

        var items = new List<SelectListItem>
                        {
                            new SelectListItem
                                {Text = @"Text #1", Value = "1"},
                            new SelectListItem
                                {Text = @"Text #2", Value = "2"},
                        };

        return items;

    }

I have a controller action when the form is posted back:

 [HttpPost] 
    public void UploadDocument(DocumentModel model)
    {
        if (ModelState.IsValid)
        {
            // I want to get the text from the dropdown
        }
    }

How do i get the text from my drop down list? Thanks

Answers


You may not get this easily with the default model binding. You have to a small workaround like this.

1) Add a new property to your model/viewmodel to store the selected text

public class DocumentModel
{
    public int TypeID { get; set; }
    public List<SelectListItem> DocumentTypes { get; set; }
    public string SelctedType { set;get;}
}

2) Use Html.HiddenFor Helper method to create a hidden variable in the form for this property

@Html.HiddenFor(x => x.SelctedType)

3) Use little javascript to override the submit ! ie; When user submits the form, Get the selected Text from the dropdown and set that value as the value of the Hidden field.

$(function () {
    $("form").submit(function(){
        var selTypeText= $("#TypeID option:selected").text();
        $("#SelctedType").val(selTypeText);           
    });
});

Now in your HTTPPost action method, This will be available in the SelectedType property.

[HttpPost]
public void UploadDocument(DocumentModel model)
{
   if(ModelState.IsValid)
   {
      string thatValue=model.SelectedType;
   }
}

if what you want to do is to retrieve selected item then this can do the work :

  var selecteItem = model.DocumentTypes.Where(item=>item.Selected).FirstOrDefault();

Cheers!


On your model I would have another string -

public string Selected{ get; set; }

then in your view :

@Html.DropDownListFor(model => model.Selected, new SelectList(Model.DocumentTypes, "Value", "Text"))

I stumbled here trying to find the way to get the text value out of a SelectList to display it in a format other than a DropDownList (I'm reusing my Edit ViewModel as it has all the data I required)

var text = selectList.Where(q => q.Selected == true).First().Text;

Need Your Help

Batch IF statement variable inside another variable

variables batch-file if-statement

I'm having a problem with a framework for a batch game I'm trying to create. I want to check if a variable is something other than a blank space. However, which variable I'm trying to check is in

connect MYSQL with netbeans 7.4

java mysql netbeans-7

Iam new on using NetBeans 7.4 , i want to connect my java application to MYSQL , the application is desktop application .