如何在视图组件MVC .netcore中使用task <t>

时间:2017-02-17 13:37:13

标签: asp.net-mvc asp.net-core

@addTagHelper "*, Microsoft.AspNetCore.Mvc.TagHelpers"
@model Task<SocialManager.Model.MSEData>

<article class="social_list" style="display: inline-block">
    <select id="social_list_lb">
        <option value="None">-- Select --</option>
            @foreach (var ll in Model.SocialListViewModel)
            {  
                 <option value="@ll.ListName">@ll.ListName</option>
            } 


    </select>
    <button class="add_field" data-field-key="@Model.Id">ADD</button>
</article>


public async Task<MSEData> GetMSEDataByValue(long id)
{
    var v = MSEData.Where(a => a.Id == id).FirstOrDefault();
    var t = TrioData.Where(u => u.MSEDataId == v.Id).ToList();

    v.TrioField = t;    
    v.SocialListViewModel = SocialListDataContext.SocialListViewModelList2;
    await GetXMLData();

    v.TrioShows = vm.trio;

    return v;
}

public IViewComponentResult Invoke()
{          
      var MSEDatas =  _MSEData.GetMSEDataByValue(SocialController.holdVal);
      return View(MSEDatas);
}

VIZTrioMse vm = new VIZTrioMse();
public async Task GetXMLData()
{

    string serviceDocUri = "http://127.0.0.1:5555";
    await vm.GetShows(serviceDocUri);
}

我已将模型从MSEData更改为Task<-MSEData->但我收到此错误消息:Model.SocialListViewModel

  

'任务'不包含'TrioShows'的定义,没有   扩展方法'TrioShows'接受类型的第一个参数   '任务'可以找到

除了Id之外,我也得到了所有其他属性。

1 个答案:

答案 0 :(得分:1)

请勿使用Task<>作为模型。使用模型本身:

@model SocialManager.Model.MSEData

您不应该向视图发送任务。您应等待任务并将结果发送到您的视图。

编辑:鉴于您发布的控制器操作,v不能是Task<>的实例,或者该代码根本无法编译。 vMSEData的一个实例,因此您的模型应该MSEData

再次编辑,因为您不断更改问题:我对此并不是100%熟悉:

public IViewComponentResult Invoke()
{    
    var MSEDatas =  _MSEData.GetMSEDataByValue(SocialController.holdVal);
    return View(MSEDatas);
}

但似乎你应该等待 async操作:

public async Task<IViewComponentResult> InvokeAsync()
{    
    var MSEDatas = await _MSEData.GetMSEDataByValue(SocialController.holdVal);
    return View(MSEDatas);
}

也使用InvokeAsync()而不是Invoke()