2017-08-17 24 views
0

我想從一個控制器調用ViewComponent,沿着一些參數如下面的方式匿名對象通過控制器:返回ViewComponent從參數

public IActionResult Test(string pod, string start, string end) 
{ 
    ServiceClient r2s = new R2S.ServiceClient(); 
    R2S.Konstant[] kData = r2s.GetKonstantListAsync(new string[] { "STATION" }, new string[] { pod }).Result; // mätarnummer in... --> alla konstanter kopplade till denna. 

    return ViewComponent("MeterReader2", new { k = kData[0], fromDate = start, toDate = end }); 
} 

我ViewComponent看起來是這樣的:

public class MeterReader2ViewComponent : ViewComponent 
{ 
    public async Task<IViewComponentResult> InvokeAsync(Models.Konstant k, string fromDate, string toDate) // Endast en kanal. 
    { 
     code.... 
    } 
} 

我已經在ViewComponent中放置了一個斷點。當我運行代碼時,它不會中斷。但是,如果我只是在不傳遞任何值的情況下調用ViewComponent,它確實會中斷。像這樣:

public IActionResult Test(string pod, string start, string end) 
{ 
    ServiceClient r2s = new R2S.ServiceClient(); 
    R2S.Konstant[] kData = r2s.GetKonstantListAsync(new string[] { "STATION" }, new string[] { pod }).Result; // mätarnummer in... --> alla konstanter kopplade till denna. 

    return ViewComponent("MeterReader2"); 
} 

回答

0

通常,您不會以這種方式返回ViewComponent。相反,你會創建一個視圖,並在該視圖的標記調用ViewComponent,傳遞任何相關的屬性,你可能需要。

注意:您有一個同步方法Test,它調用異步命令.GetKonstantListAsync。要麼全部同步,要麼更改方法定義使其異步。 (我會假設你要保持它的異步的,所以我修改的方法,並添加await關鍵字

在你的控制器類:

public class MyController 
{ 
    public async Task<IActionResult> Test(string pod, string start, string end) 
    { 
     var r2s = new R2S.ServiceClient(); 
     R2S.Konstant[] kData = await r2s.GetKonstantListAsync(new string[] { "STATION" }, new string[] { pod }).Result; 
     ViewData["start"] = start; 
     ViewData["end"] = end; 

     return View(kData); 
    } 
} 

的ViewComponent:

namespace MyApp.ViewComponents 
{ 
    public class MeterReader2ViewComponent : ViewComponent 
    { 
     public async Task<IViewComponentResult> InvokeAsync(Models.Konstant k, string fromDate, string toDate) // Endast en kanal. 
     { 
      // code.... 
     } 
    } 
} 

在瀏覽\ myController的\ Task.cshtml

@using MyApp.ViewComponents; 
@model RS2.Konstant[]; 

<h2>Here are some View Components!</h2> 
@foreach (var konstant in Model) { 
    @await Component.InvokeAsync(nameof(MeterReader2ViewComponent), new { k = konstant, fromDate = ViewData["start"], toDate = ViewData["end"]}) 
} 

道歉,如果我的代碼是不是相當準確的說,我現在不在Visual Studio之前對它進行測試。

+0

我明白了。我只是嘗試了這種方法。如果我創建一個視圖,然後使用新參數調用ViewComponent,則會正確加載一個新的視圖。但是,我目前已經在另一個ViewComponent中。我如何使調用在同一視圖組件視圖內發生? – jazy