【问题标题】:MVC - cannot convert from 'int' to 'system.web.ui.webcontrols.listitemMVC - 无法从“int”转换为“system.web.ui.webcontrols.listitem”
【发布时间】:2017-01-20 15:20:15
【问题描述】:

您好,我正在尝试从多选下拉框中选择客户 ID 的客户文件;我遇到上述错误的控制器

public ActionResult Create(CountryViewModel country)
    {
        List<SelectListItem> selectedItems = country.MenuCountry.Where(p => country.ContryIds.Contains(int.Parse(p.Value))).ToList();         
        try
        {
            CustomerClient CC = new CustomerClient();
            var result = CC.findAll();

            var matches = from customer in result
                          where selectedItems.Contains(customer.Id) // Here is error and saying cannot convert from 'int' to 'system.web.ui.webcontrols.listitem
                          select customer;
           // ViewBag.listCustomers = CC.findAll();

            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

我的客户类在下面给出

public class Customer
{
    [Display(Name = "CustomerId")]
    public int Id { get; set; }
    [Display(Name = "Country")]
    public string Country { get; set; }
}

请指教;非常感谢

【问题讨论】:

  • selectedItems 需要是 List&lt;int&gt; 类型(或 int[] 等)
  • selectedItems.Any(s=> s.value==ccustomer.Id.ToString())
  • @MarkC。在 asp.net mvc 中,我们有一个类 SelectListItem 。我认为用户正在使用它来创建下拉列表。它有一个 Text 和 value 属性都是字符串类型
  • 嗨,我的 countryViewMovel 如下所示 public class CountryViewModel { public List MenuCountry{ get;放; } 公共 int[] ContryIds { 获取;放; } }
  • @user3624511 试试我的回答让我知道这是否是你想要的。

标签: c# asp.net linq model-view-controller drop-down-menu


【解决方案1】:

请试试这个

 var matches = from customer in result
               where selecteList.Exists(a=>a.Value==  customer.Id.ToString())                          select customer;

【讨论】:

  • 嗨#Yashveer Singh 我遇到了另一个问题;先前已解决但再次损坏; List selectedItems = country.MenuCountry.Where(p => country.ContryIds.Contains(int.Parse(p.Value))).ToList() 有错误-------- Saying Value 不能为空。参数名称:来源
  • 似乎 country.MenuCountry 有一些值为 null 。我不能告诉你更多,因为我没有数据,并且它与你何时削减价值有关。
  • 试试这个:- List selectedItems = country.MenuCountry.Where(p => !string.IsNullOrEmpty(p.Value) && country.ContryIds.Contains(int.Parse(p.Value ))).ToList()
  • @user3624511 我想我解决了你原来的问题。因此,如果您有其他错误,最好提出一个新问题。如果它解决了您在问题中提到的问题,请标记它。
  • @user3624511 如果 Yashveer 希望继续为您提供帮助 - 这取决于他们。但是,如果他们不愿意,请停止扩展讨论,要求进一步讨论。谢谢。
【解决方案2】:

假设您的 CountryViewModel 看起来像这样

public class CountryViewModel 
{
  public List<SelectListItem> MenuCountry{ get; set; } 
  public string[] ContryIds { get; set; } 
}

现在您只需针对该国家/地区进行过滤。只需使用country.ContryIds 即可获取选定的国家/地区ID(实际上是名称)。

 public ActionResult Create(CountryViewModel country)
 {
    var CC = new CustomerClient();
    var result = CC.findAll(); // assuming this return a collection of Customer
    var matches = result.Where(x=>country.CountryIds.Contains(x.Country);
    // to do : return something
 } 

由于Country 属性是string 类型,我们需要确保下拉菜单的选项值也是字符串(国家(名称)?)。因此,可能在您的 GET 操作中使用下拉菜单呈现视图,

var countryOptions = new List<SelectListItem> {
  new SelectListItem { Value="USA", Text="USA"},
  new SelectListItem { Value="Canada", Text="Cananda" }
};
// to do : pass countryOptions  to the view to render the dropdown

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2013-02-28
    • 2013-07-14
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多