我试图从控制器调用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 :(得分:0)
通常,您不会以这种方式返回ViewComponent。相反,您将创建一个View,并在该View的标记内调用ViewComponent,向其传递您可能需要的任何相关属性。
注意:您有一个调用异步命令Test
的同步方法.GetKonstantListAsync
。要么全部同步,要么更改方法定义以使其异步。 (我假设你想让它保持异步,所以我修改了方法并添加了await
关键字。
在您的Controller类中:
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....
}
}
}
在Views \ 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前面测试它。