简体   繁体   中英

create array in javascript with Html.action

I'm trying to create an array of strings in javascript by calling a function in my MVC controller and passing back an array of strings. This pretty simply just isn't working and I'm not sure what i need to do to amend this. below you can see both my javascript and controller code. Any help is greatly appreciated

javascript:

var optionString = @Html.Action("PopulateDashboardDropdown", "Embed", new { Dashboards = Model[0][0].Dashboards });

Controller:

public string[] PopulateDashboardDropdown(ODataResponseListDashboard[] dashboards)
    {
        string email = "";
        //loop that finds the groupID assigned to the currently logged in user
        foreach (Claim claim in ClaimsPrincipal.Current.Claims)
        {
            if (claim.Type == "emails")
            {
                email = claim.Value;
                email = email.ToLower();
            }
        }
        string[] orgs = GetOrgs(email);
        string[] retVal = new string[orgs.Length];
        bool[] admin = new bool[orgs.Length];
        for (int i = 0; i < orgs.Length; i++)
        {
            admin[i] = isAdmin(orgs[i], email);
            retVal[i] = "";
        }

        //loop that creates a string to emulate the innerHtml of a dropdown selector based on the names of all dashboards in the workspace
        for (int i = 0; i < orgs.Length; i++)
        {
            for (int j = 0; j < dashboards[i].Value.Count; j++)
            {
                if (dashboards[i].Value.ElementAtOrDefault(j).DisplayName.Contains("Admin"))
                {
                    if (admin[i])
                    {
                        retVal[i] += "<option>" + dashboards[i].Value.ElementAtOrDefault(j).DisplayName + "</option>";
                    }
                }
                else
                {
                    retVal[i] += "<option>" + dashboards[i].Value.ElementAtOrDefault(j).DisplayName + "</option>";
                }
            }
        }
        return retVal;
    }

Well, from isn't clear what is the error or what happens exactly but I see a couple of problems. I suggest the following in order to fix the code:

1) Change the result of your controller method to JsonResult:

public JsonResult PopulateDashboardDropdown(ODataResponseListDashboard[] dashboards)
{
    ...
    return this.Json(retVal);
}

2) Get your data via an ajax call (note: you need to insert the proper url in http format. The Http.Action/Razor will not work in javascript):

$.getJSON(myUrl, function (data) {  
   var optionString = data;       
   ...
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM