2017-02-17 1 views
0
@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Как использовать задачу <T> в компоненте представления MVC .netcore

«Task» не содержит определение для «TrioShows» и не метод расширения «TrioShows» принимая первый аргумент «Task» типа можно найти

Я также получите это для всех моих других свойств, кроме Id.

+2

Почему ваша модель 'Tas k 'вместо' SocialManager.Model.MSEData'? Как вы планируете * ждать * этой задачи в представлении? – David

+2

Вы * не нуждаетесь в задачах в представлении. Представление отвечает за отображение вещей, а не обработку. Обработка должна выполняться * контроллером *. Ваша модель должна быть * результатом * задачи, то есть 'SocialManager.Model.MSEData', а не задачей, которая может или не может выдавать данные. –

+0

. Отправьте свой код действия. Похоже, вы вернули задачу вместо ее результатов. У вас должна быть строка типа «var result = await WhateverLoadsTheDataAsync(); return View (result); ' –

ответ

1

Не используйте в качестве модели Task<>. Используйте саму модель:

@model SocialManager.Model.MSEData 

Вы не должны посылающий задачу на ваш взгляд. Вы должны быть в ожидании задачи и отправки результата на ваш взгляд.

Edit: Учитывая действие контроллера вы опубликовали, v не может быть экземпляром Task<> или что код не компилируется вообще. v - это пример MSEData, поэтому ваша модель должна be MSEData.

Edit снова, так как вы постоянно менять вопрос: Я не 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()

+0

@ TânNguyễn: Нужно ли ему возвращать 'View (v)' в .NET Core? Похоже, это будет представлять собой совершенно другое сообщение об ошибке, о котором он не упомянул. Во-вторых, весь ответ отвечает на сообщение об ошибке. Его модель должна быть типа 'MSEData', которая предположительно * делает * содержит определение для« TrioShows »и других его свойств. – David

+0

Редактировать Я отправил вам работы, но не когда обновляю страницу. Я пробовал ответ выше, но я получаю: InvalidOperationException: метод «Invoke» компонента вида «SocialManager.ViewComponents.AddMSEDataViewComponent» не может вернуть задачу. – Decoder94

+0

@ Decoder94: Единственное попытка, которую я видел в этом ответе, - попытка использовать 'async void'. Я, честно говоря, не могу придумать худшего предложения, чем сделать это.Что касается компонента вида, я думаю, я не совсем понимаю, как это работает. Но в конечном итоге вам нужно вернуть экземпляр вашей модели в представление. * Не * a 'Задача <>'. – David

Смежные вопросы