Passing JavaScript array in View to Controller Razor

I need to pass an array form my view to the Action, how to do that? I‘ve read several blogs & Q&A, no luck. Below is my code. I need to get the “selectedVals” in my “CreateScoreLinkFile”.

Thanks in advance.

<script>
    $('#btnGetFile').on('click', function () {  
      var selectedVals = ["12","233","121","34","34"];

     location.href = '@Url.Action("CreateScoreLinkFile", "Home"';                             

    });          
</script>


    public FileStreamResult CreateScoreLinkFile()
    {          

        EDMGreDataIO objPDMDataIOForGADIReports = new EDMGreDataIO();
        string scoreLinkData = objPDMDataIOForGADIReports.GetScoreLinkReport(104488, 3582527, 2, "10-JUL-2009", "01-JUL-2009", 1);           

        var byteArray = Encoding.ASCII.GetBytes(scoreLinkData);
        var stream = new MemoryStream(byteArray);
        string sFileName = "ScoreReport " + DateTime.Now.ToString("ddd dd MMMM yyyy hh:mm:ss tt") + ".txt";
        return File(stream, "text/plain", sFileName);
    }

Upvotes: 0

Views: 775

Answers (2)

Sameer Azazi
Sameer Azazi

Reputation: 1497

Since you are making a GET request, you can pass values as query string parameters which can be received in controller action

 <script>
    $('#btnGetFile').on('click', function () {
        var baseUrl = '@Url.Action("CreateScoreLinkFile", "Home")';
        var selectedVals = ["12", "233", "121", "34", "34"];

        location.href = baseUrl + "?selectedVals=" + selectedVals;

    });
</script>

public FileStreamResult CreateScoreLinkFile(string selectedVals)
    {  
        //you can use any serialzer to deserialize your string to an array
        string[] arrSelectedVals = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(selectedVals);
        EDMGreDataIO objPDMDataIOForGADIReports = new EDMGreDataIO();
        string scoreLinkData = objPDMDataIOForGADIReports.GetScoreLinkReport(104488, 3582527, 2, "10-JUL-2009", "01-JUL-2009", 1);           

        var byteArray = Encoding.ASCII.GetBytes(scoreLinkData);
        var stream = new MemoryStream(byteArray);
        string sFileName = "ScoreReport " + DateTime.Now.ToString("ddd dd MMMM yyyy hh:mm:ss tt") + ".txt";
        return File(stream, "text/plain", sFileName);
    }

Upvotes: 1

I've done it as below on the button click

            var exportForm = document.forms[0];
            exportForm.selectedValue.value = selectedVals;
            exportForm.target = "_blank";
            exportForm.action = '@Url.Action("CreateScoreLinkFile", "Home")';
            exportForm.submit();

Upvotes: 0

Related Questions