添加值到列表

时间:2016-05-20 20:34:58

标签: c# asp.net-mvc

我正在调用一个API方法,它返回一些问题并回答为List。我需要在View中显示此列表,不确定如何为常见问题列表添加值。因为我发送这个List作为模型的一部分到视图显示在屏幕上。

在foreach循环中,我必须将web api的值添加到faq List。

这是我返回模型的方法。

[HttpGet]
public async Task<ActionResult> ShowContact(int loanId)
{
    HelpCenterViewModel helpCenterViewModel = new HelpCenterViewModel();
    helpCenterViewModel.ContactInfo.loanId = loanId;
    string json = string.Empty;
    List<Faq> FaqObject = null;

    var responseApi = await httpClient.GetAsync(string.Format("{0}/{1}", 
        CommonApiBaseUrlValue, "faqs"));
    if (responseApi.IsSuccessStatusCode)
    {
        json = responseApi.Content.ReadAsStringAsync().Result;
        FaqObject = new JavaScriptSerializer().Deserialize<List<Faq>>(json);
    }
    var response = new
    {
        success = FaqObject != null,
        data = FaqObject
    };

    foreach (var faqitem in response.data)
    {
         //This is where I dont know how to add to faq list.
        //helpCenterViewModel.Faq.Answer = faqitem.Answer;
        //helpCenterViewModel.Faq.Category = faqitem.Category;

    }
    return View(helpCenterViewModel);
}

这是我重新调整它以查看的模型:

public class HelpCenterViewModel
{
    public List<Faq> Faq { get; set; }
    public ContactUsInfo ContactInfo { get; set; }

    public HelpCenterViewModel()
    {
        this.Faq = new List<Faq>();
        this.ContactInfo = new ContactUsInfo();
    }
}

这是faq类​​:

public class Faq
{
    public int Id { get; set; }

    public string Category { get; set; }

    public string Question { get; set; }

    public string Answer { get; set; }
}

这是我的观点:

   @model IEnum   erable<Carfinance.Loans.Web.ViewModels.HelpCenterViewModel>
   @foreach (var item in Model)
      {
          <li>@Html.DisplayFor(faq => item.Faq)</li>
       }

但它给了我这个错误。

      The 'DelegatingHandler' list is invalid because the property 'InnerHandler' of 'CorsMessageHandler' is not null.

参数名称:处理程序

3 个答案:

答案 0 :(得分:1)

清除了一些代码,但您已经有List<Faq>,所以只需将其分配给您的模型。

[HttpGet]
public async Task<ActionResult> ShowContact(int loanId)
{
    string json = string.Empty;
    List<Faq> FaqObject = null;  // Should probably be new List<Faq>

    var responseApi = await httpClient.GetAsync(string.Format("{0}/{1}", CommonApiBaseUrlValue, "faqs"));
    if (responseApi.IsSuccessStatusCode)
    {
        json = responseApi.Content.ReadAsStringAsync().Result;
        FaqObject = new JavaScriptSerializer().Deserialize<List<Faq>>(json);
    }
    var response = new
    {
        success = FaqObject != null,
        data = FaqObject
    };
    return View(new HelpCenterViewModel
    {
      ContactInfo=new ContactInfo {loanId},
      Faq=FaqObject
    });
}

不确定你使用response变量做了什么,所以我把它留在那里,但似乎没有任何用处,也可以删除。然后你就拥有了这个:

[HttpGet]
public async Task<ActionResult> ShowContact(int loanId)
{
    var responseApi = await httpClient.GetAsync(string.Format("{0}/{1}", CommonApiBaseUrlValue, "faqs"));
    if (responseApi.IsSuccessStatusCode)
    {
      return View(new HelpCenterViewModel
      {
        ContactInfo=new ContactInfo {loanId},
        Faq=new JavaScriptSerializer().Deserialize<List<Faq>>(
          responseApi.Content.ReadAsStringAsync().Result)
      });
    }
    return View(new HelpCenterViewModel
    {
      ContactInfo=new ContactInfo {loanId},
      Faq=new List<Faq>()
    });
}

答案 1 :(得分:1)

您需要为每个项目创建一个新对象,并将其添加到列表中。这可以通过各种方式完成,具体取决于您希望实现的详细程度:

foreach (var faqitem in response.data)
{
     var faq = new Faq();
     faq.Answer = faqitem.Answer;
     faq.Category = faqitem.Category;

     helpCenterViewModel.Faq.Add(faq); 
}

OR

foreach (var faqitem in response.data)
     helpCenterViewModel.Faq.Add(new Faq()
     {
         Answer = faqitem.Answer;
         Category = faqitem.Category;
     }); 

OR

helpCenterViewModel.Faq = response.data.Select(x => new Faq { 
    Answer = x.Answer, 
    Category = x.Category
}).ToList();

答案 2 :(得分:0)

嗯,Faq上的HelpCenterViewModel属性实际上是List<Faq>(你有那种误导性的命名),所以请使用Add方法:

foreach (var faqitem in response.data)
{
     var faq = new Faq();
     faq.Answer = faqitem.Answer;
     faq.Category = faqitem.Category;

     helpCenterViewModel.Faq.Add(faq); 
                        //^ this Faq is a List
}

您应该将List<Faq>的名称复数为Faqs,以防止您自己混淆。