C#&;具有视图模型和列表的ASP.NET MVC问题
我有一些我似乎无法解决的问题。我试图做的是生成一个记录列表,其中包含一个复选框来选择该记录。我遇到的第一个问题是将复选框添加到模型中。它告诉我这是一个无效的列。因此,我创建了一个带有添加复选框的视图模型 我得到这个错误: 无法将类型“System.Collections.GenericList”隐式转换为System.Collections.Generic.List 以下是控制器获取:C#&;具有视图模型和列表的ASP.NET MVC问题,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我有一些我似乎无法解决的问题。我试图做的是生成一个记录列表,其中包含一个复选框来选择该记录。我遇到的第一个问题是将复选框添加到模型中。它告诉我这是一个无效的列。因此,我创建了一个带有添加复选框的视图模型 我得到这个错误: 无法将类型“System.Collections.GenericList”隐式转换为System.Collections.Generic.List 以下是控制器获取: public ActionResult SelectTags() { TagsModel tags =
public ActionResult SelectTags()
{
TagsModel tags = new TagsModel();
using (ProjectEntities db = new ProjectEntities())
{
tags.Tags = db.Tags.ToList<Tags>();
}
return View(tags);
}
public ActionResult SelectTags()
{
TagsModel tags=新的TagsModel();
使用(ProjectEntities db=new ProjectEntities())
{
tags.tags=db.tags.ToList();
}
返回视图(标签);
}
然后在帖子上我得到:
'IEnumerable<TagsViewModel>' does not contain a definition for 'ToList' and the best extention method overload 'Enumerable.ToList<tags>(IEnumerable<Tags>)' requires a reciever of type 'IEnumerable<Tags>'
“IEnumerable”不包含“ToList”的定义,而最佳扩展方法重载“Enumerable.ToList(IEnumerable)”需要类型为“IEnumerable”的接收器
以下是帖子:
[HttpPost]
public ActionResult SelectTags(TagsModel model)
{
var selectedTags = model.Tags.Where(x => x.IsChecked == true).ToList<Tags>();
return Content(String.Join(",",selectedTags.Select(x => x.TagsId)));
}
[HttpPost]
公共操作结果选择标记(标记模型)
{
var selectedTags=model.Tags.Where(x=>x.IsChecked==true.ToList();
返回内容(String.Join(“,”,selectedTags.Select(x=>x.TagsId));
}
我正在使用页面上的System.Link
以下是我的模型:
namespace Project.ProjectModels.Entities
{
public class Tags
{
[Key]
public int TagsId { get; set; }
[Display(Name = "Id")]
public string Id { get; set; }
[Display(Name = "Address")]
public string DataHmiAddress { get; set; }
[Display(Name = "Type")]
public string DataHmiDataType { get; set; }
[Display(Name = "Round Places")]
public int DataHmiRoundPlaces { get; set; }
[Display(Name = "Update In")]
public int DataHmiUpdateIn { get; set; }
[Display(Name = "Update Level")]
public int DataHmiUpdateLevel { get; set; }
[Display(Name = "Value")]
[DisplayFormat(DataFormatString = "{0:0.000}", ApplyFormatInEditMode = true)]
public decimal DataHmiValue { get; set; }
}
}
namespace Project.ViewModels
{
public class TagsViewModel
{
public int TagsId { get; set; }
[Display(Name = "Id")]
public string Id { get; set; }
[Display(Name = "Address")]
public string DataHmiAddress { get; set; }
[Display(Name = "Type")]
public string DataHmiDataType { get; set; }
[Display(Name = "Round Places")]
public int DataHmiRoundPlaces { get; set; }
[Display(Name = "Update In")]
public int DataHmiUpdateIn { get; set; }
[Display(Name = "Update Level")]
public int DataHmiUpdateLevel { get; set; }
[Display(Name = "Value")]
[DisplayFormat(DataFormatString = "{0:0.000}", ApplyFormatInEditMode = true)]
public decimal DataHmiValue { get; set; }
public bool IsChecked { get; set; }
}
public class TagsModel
{
public virtual List<TagsViewModel> Tags { get; set; }
}
}
namespace Project.ProjectModels.Entities
{
公共类标记
{
[关键]
public int TagsId{get;set;}
[显示(Name=“Id”)]
公共字符串Id{get;set;}
[显示(Name=“Address”)]
公共字符串数据地址{get;set;}
[显示(Name=“Type”)]
公共字符串数据类型{get;set;}
[显示(Name=“圆形位置”)]
public int datahmirroundplaces{get;set;}
[显示(Name=“更新中”)]
public int DataHmiUpdateIn{get;set;}
[显示(Name=“更新级别”)]
public int DataHmiUpdateLevel{get;set;}
[显示(Name=“Value”)]
[DisplayFormat(DataFormatString=“{0:0.000}”,ApplyFormatInEditMode=true)]
公共十进制数据值{get;set;}
}
}
命名空间Project.ViewModels
{
公共类TagsViewModel
{
public int TagsId{get;set;}
[显示(Name=“Id”)]
公共字符串Id{get;set;}
[显示(Name=“Address”)]
公共字符串数据地址{get;set;}
[显示(Name=“Type”)]
公共字符串数据类型{get;set;}
[显示(Name=“圆形位置”)]
public int datahmirroundplaces{get;set;}
[显示(Name=“更新中”)]
public int DataHmiUpdateIn{get;set;}
[显示(Name=“更新级别”)]
public int DataHmiUpdateLevel{get;set;}
[显示(Name=“Value”)]
[DisplayFormat(DataFormatString=“{0:0.000}”,ApplyFormatInEditMode=true)]
公共十进制数据值{get;set;}
已检查公共布尔值{get;set;}
}
公共类标记模型
{
公共虚拟列表标记{get;set;}
}
}
谢谢你的帮助 不能用标记列表初始化标记列表viewmodel。这两个列表之间没有隐式转换,标记和TagsViewModel之间也没有隐式转换 您需要自行实现此转换。
一种可能性是通过 例如,您可以将以下代码添加到Tags类:
public static implicit operator TagsViewModel(Tags source)
{
if (source == null) return null;
TagsViewModel model = new TagsViewModel();
model.Id = source.Id;
.... set the other properties here...
return model;
}
现在,我们已经指导Tags类如何将自身转换为TagsViewModel。此时,分配
列表的代码可以更改为:
public ActionResult SelectTags()
{
TagsModel tags = new TagsModel();
using (ProjectEntities db = new ProjectEntities())
{
foreach(var t in db.Tags)
// At this point the Tags t variable will be
// converted to a TagsViewModel and added to the list
tags.Tags.Add(t);
}
return View(tags);
}
不要忘记初始化Tags变量内的Tags属性。
将TagsModel类更改为
public class TagsModel
{
public virtual List<TagsViewModel> Tags { get; set; } = new List<TagsViewModel>();
}
并使用foreach循环构建SelectedTags列表
[HttpPost]
public ActionResult SelectTags(TagsModel model)
{
List<Tags> selectedTags = new List<Tags>();
foreach(var t in model.Tags.Where(x => x.IsChecked))
selectedTags.Add(t);
return Content(String.Join(",",selectedTags.Select(x => x.TagsId)));
}
[HttpPost]
公共操作结果选择标记(标记模型)
{
List selectedTags=新建列表();
foreach(model.Tags.Where(x=>x.IsChecked)中的var t)
选择标记。添加(t);
返回内容(String.Join(“,”,selectedTags.Select(x=>x.TagsId));
}
我没有理解你的意思?因此,当我将其更改为时,我发现标签中没有ToList的定义,我真的不确定@Steve发生了什么。所有发布的条目现在都消失了??我删除了现在多余的注释,但心不在焉地删除了代码顶部的答案。'运算符“-名称空间不能直接包含字段或方法等成员。和TagViewModel-。隐式运算符TagsViewModel(标记源)用户定义的转换必须转换为或形成封闭类型。因此,这个问题的第二部分是文章。有没有办法用你提供的东西来改变这一点?这篇文章也有同样的问题。您将收到一个标记列表viewmodel,并尝试像使用标记列表一样使用它们。您需要另一个转换,这次是从TagsViewMode到TagsThanks的转换,以获得您的帮助。我相信你有标签的地方;应选择标记。添加(t);列表selectTags=new List()后缺少分号;
[HttpPost]
public ActionResult SelectTags(TagsModel model)
{
List<Tags> selectedTags = new List<Tags>();
foreach(var t in model.Tags.Where(x => x.IsChecked))
selectedTags.Add(t);
return Content(String.Join(",",selectedTags.Select(x => x.TagsId)));
}