2016-08-23 10 views
1

私はビジュアルスタジオに組み込まれたパワーBIを使用してアプリケーションを構築しています。私はユーザ名と役割をレポートに追加しましたコントローラのアクションは、埋め込みたい実際のレポートのユーザ名と役割に対応しています。私は、index.cshtmlのテキストボックスから変数としてユーザー名をReportアクションに渡したいと思います。この値がハードコードされているとレポートが読み込まれて埋め込まれますが、変数として渡すことはできません!ここでMVC Power BI Embeddedを使用して変数を渡すにはどうすればよいですか?

はのActionResultはコントローラである - 私は私の取得を入れてきました。ここで

public string username { get; set; } 

を設定しますが、私が使用したHTMLですモデルで

public async Task<ActionResult> Report(string reportId) 
{ 
    //This is where I'm trying to get the variable from the textbox 
    username = Request["centreID"].ToString(); 

    using (var client = this.CreatePowerBIClient()) 
    { 

     var reportsResponse = await client.Reports.GetReportsAsync(this.workspaceCollection, this.workspaceId); 
     var report = reportsResponse.Value.FirstOrDefault(r => r.Id == reportId); 
     IEnumerable<string> roles = new List<string>() { "xxxxxxxx" }; 

// I can hardcode the username here, and it works, but can't pass in a variable from the html like above 
     //string username = "xxxxxx"; 

     //username = this.username; 
     var embedToken = PowerBIToken.CreateReportEmbedToken(this.workspaceCollection, this.workspaceId, report.Id, username, roles); 
     var viewModel = new ReportViewModel 
     { 
      Report = report, 
      AccessToken = embedToken.Generate(this.accessKey) 
     }; 

     return View(viewModel); 
    } 
} 

です。私は前にコントローラでvoidメソッドでこれをテストしたのだが、

@using (Html.BeginForm("Report", "Dashboard")) 
{ 
    @Html.Label("Enter Centre ID") 
    @Html.TextBox("centreID") 

    <input type="submit" value="submit" /> 
} 
</span> 
</a> 
+0

この行のブレークポイント 'username = Request [" centreID "]。ToString();' ...値を取得しているかどうか? – Hackerman

+0

いいえ、そうではありません...コントローラのvoidメソッドを指すhtml.beginformアクションを実行する前に、ブレークポイントを設定して、値を渡していました。これは非同期なのですか? –

+0

そして 'reportId'の値は? – Hackerman

答えて

0

あなたの方法は、reportIdを期待しているコントローラに変数を渡していますが、あなたはそれを呼び出しているとき、その名前のコントロールはありません。さて、あなたは、あなたのコードは次のように更新する必要があり、ViewBagの内側に前のステップからその値を持っていると仮定してみましょう:

@using (Html.BeginForm("Report", "Dashboard")) 
{ 
    @Html.Label("Enter Centre ID") 
    @Html.TextBox("centreID") 
    <input type="hidden" name="reportId " value="@(ViewBag.reportId ?? "")" /> 
    <input type="submit" value="submit" /> 
} 

など、あなたの方法であって、あなたが入れた場合

public async Task<ActionResult> Report(string reportId, string centreID) 
{ 
//This is where I'm trying to get the variable from the textbox 
using (var client = this.CreatePowerBIClient()) 
{ 

    var reportsResponse = await client.Reports.GetReportsAsync(this.workspaceCollection, this.workspaceId); 
    var report = reportsResponse.Value.FirstOrDefault(r => r.Id == reportId); 
    IEnumerable<string> roles = new List<string>() { "xxxxxxxx" }; 

    // I can hardcode the username here, and it works, but can't pass in a variable from the html like above 
    var embedToken = PowerBIToken.CreateReportEmbedToken(this.workspaceCollection, this.workspaceId, report.Id, centreID, roles); 
    var viewModel = new ReportViewModel 
    { 
     Report = report, 
     AccessToken = embedToken.Generate(this.accessKey) 
    }; 

    return View(viewModel); 
} 
} 
関連する問題