2017-09-06 7 views
0

JavaScriptの文字列を作成しようとしています。MVCコントローラで関数を呼び出し、文字列の配列を戻します。これはかなり単純に機能していないし、私はこれを修正するために何をする必要があるのか​​分からない。下に私のjavascriptとコントローラのコードの両方を見ることができます。すべてのヘルプは大Html.actionでjavascriptで配列を作成する

JavaScriptを高く評価されています

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

コントローラー:

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; 
    } 
+1

これに '@ Html.Action()'を使用しているのはなぜですか?なぜ、 'JsonResult'を返すメソッドを呼び出すajaxを使用しないのですか? –

+1

'$ .ajax'' JsonResult'を 'success'パーツで呼び出すと問題ありません。 'Html.Action'は、JSONではなく、ビュー全体または部分的なビューを返すアクションメソッドで使用するためのものです。 –

+1

もう一つの方法があります:あなたのモデルや 'ViewBag'のリストプロパティとして値を取得します。次に、あなたのcshtmlでループスルーして、javascript配列を設定します: ' ' – adiga

答えて

1

まあ、誤りであるか、正確に何が起こるが、私は問題のカップルを見たものは明らかではありませんから。あなたが挿入する必要があります:AJAXコール(ノート経由でデータを取得します)

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

2:化するJsonResultへのあなたのコントローラメソッドの結果を変更します)

1:私は、コードを修正するために、次のことを示唆しますhttpフォーマットの適切なURLです.Http.Action/Razorはjavascriptでは機能しません)。

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

これは私のポストのコメントと私はまだmvcに若干新鮮ですし、ちょうどもう少し学び、物事を改善するために素晴らしい関数を呼び出すために場所のすべてのアクションを使用していた。 –

関連する問題