danielpm
danielpm

Reputation: 125

Send Chosen Selected Values Array to Controller - MVC

So, I have a view with a chosen search box, a button "Add" (btn-default) and a button "Edit" (breadcrumb) . When I click the Add button, the ajax sent me a table with the values (in this case, funcionaries) selected in the chosen text box.

I want that, when I click on the Edit button, send the chosen values (can be one, or hundreds of values) to another controller to return another view.

Don't want to use ajax because I want to use a new view on totally.

On the controller side, when I send the data with javascript, I always get null. Why?

View

<script>
$(document).ready(function () {
    $(".btn-default").on("click", function (event, params) {

        $.ajax({
            url: '@Url.Action("EditarPonderacoesEspecial", "Sorteios")',
            type: 'POST',
            dataType: 'html',
            cache: false,
            traditional: true,
            data: { bdoIds: $(".chosen-select").val() },
            success: function (responseText, textStatus, XMLHttpRequest) {
                $("#MyDiv").empty();
                $("#MyDiv").html(responseText);
            },
            error: function () { }
        })
    });

    $(".breadcrumb").on("click",function (event, params) {
            bdoIds = $(".chosen-select").val();
            $.post("/Sorteios/EditarPonderacoesEspecialSecond/", bdoIds);
    });
});

Controller

public ActionResult EditarPonderacoesEspecialSecond(string[] bdoIds)
{ 
    //do whatever I want with the bdoIds
    return View();
}

I had tried many different ways, but the controller always receive the parameter as null. What I am doing wrong? Thanks!

Upvotes: 1

Views: 2689

Answers (2)

Dane
Dane

Reputation: 83

  1. Declare Global array like

    var SelectedArray = new Array();
    
  2. When you select multiple selectlist item each time push value in SelectedArray

    $('#ChosenId').chosen().change(function () {
    SelectedArray = $('#ChosenId').chosen().val();
    

    });

  3. Then your ajax data is like

    data: { bdoIds: SelectedArray },

Upvotes: 0

hutchonoid
hutchonoid

Reputation: 33306

Your controller action is expecting an array of strings.

Assuming .chosen-select is a select list as that part is missing from the question.

First read the selected values into an object as follows:

var selectedValues = [];
$(".chosen-select :selected").each(function() {
  selectedValues.push($(this).attr('value'));
});

Then send them as follows:

$(".breadcrumb").on("click",function (event, params) {
    var selectedValues = [];

    $(".chosen-select :selected").each(function() {
           selectedValues.push($(this).attr('value'));
    });

   $.post("/Sorteios/EditarPonderacoesEspecialSecond/", { bdoIds: selectedValues  });
});

Upvotes: 1

Related Questions