2016-08-23 3 views
1

Ich baue eine App mit Power-BI eingebettet in Visual Studio. Ich habe dem Bericht Aktion im Controller einen Benutzernamen und Rollen hinzugefügt, die einem Benutzernamen und einer Rolle im tatsächlichen Bericht entsprechen, den ich einbetten möchte. Ich möchte den Benutzernamen als Variable aus einem Textfeld in der Datei index.cshtml an die Aktion Bericht übergeben. Der Bericht lädt und bettet, wenn dieser Wert fest codiert ist, aber ich kann ihn nicht als Variable übergeben! HierWie kann ich Variablen mit MVC Power BI Embedded übergeben?

ist die Action im Controller -

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); 
    } 
} 

In dem Modell ist, wo ich habe meine get setzen und setzt

public string username { get; set; } 

Hier ist der HTML ich verwendet habe; Ich habe vorher mit einer void-Methode in der Steuerung getestet und es funktioniert die Variable in die

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

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

Wenn Sie setzen ein Haltepunkt in dieser Zeile 'username = Request [" centreID "]. ToString();' ... erhält er den Wert oder nicht? – Hackerman

+0

Nein, es ist nicht ... Bevor ich die Aktion html.beginform auf eine void -Methode im Controller verweisen ließ, habe ich Haltepunkte eingefügt und den Wert übergeben. Liegt das daran, dass dies asynchron ist? –

+0

Und der 'reportId' Wert? – Hackerman

Antwort

0

Sie Methode ein reportId erwartet, aber wenn man es nennen, gibt es keine Kontrolle mit diesem Namen . Nun nehmen wir an, dass Sie diesen Wert aus einem vorherigen Schritt in einem ViewBag haben, dann Code, den Sie müssen auf folgende Weise aktualisiert werden:

@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" /> 
} 

Und Ihre Methode, wie:

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); 
} 
}