C# 按字符串值MVC 5搜索方法
作为项目的一部分,我需要找到一种通过字符串搜索对象并在视图中显示结果的方法。谢谢你的帮助。 在我的C# 按字符串值MVC 5搜索方法,c#,asp.net-mvc,C#,Asp.net Mvc,作为项目的一部分,我需要找到一种通过字符串搜索对象并在视图中显示结果的方法。谢谢你的帮助。 在我的MainMedia视图中,我有一个侧节,我手动将字符串值传递给SearchMedia方法: @section SideBar{ <ul> <li> @Html.ActionLink("Astronomy", "SearchMedia", new {searchString = "Astronomy" })</li> <li&g
MainMedia
视图中,我有一个侧节,我手动将字符串值传递给SearchMedia
方法:
@section SideBar{
<ul>
<li> @Html.ActionLink("Astronomy", "SearchMedia", new {searchString = "Astronomy" })</li>
<li> @Html.ActionLink("World", "SearchMedia", new { searchString = "World" })</li>
<li> @Html.ActionLink("Movies", "SearchMedia", new { searchString = "Movies" })</li>
</ul>
}
TagsEnum类
public enum TagsEnum
{
[Display(Name = "Astronomy and space")]
Astronomy,
[Display(Name = "World around us")]
World,
[Display(Name = "Movies, video")]
Movies
}
最后是MediaMainController
SearchMedia
方法
public ActionResult SearchMedia(string searchString)
{
db.Medias.Where(i => i.TagsEnum.ToString() == searchString);
return View(db.Medias.OrderBy(it => it.Title));
}
据我所知,。Where()
应该找到匹配项并返回一个对象,但它不起作用。我怎样才能解决它?也许还有其他方法可以做到这一点?多谢各位
更新
我把它改成这样:
var result = db.Medias.Where(TagsEnum => TagsEnum.ToString() == searchString);
return View(result.OrderBy(it => it.title));
public class MediaViewModel
{
public List<Media> media { get; set; }
public List<Video> video { get; set; }
}
但我仍然看不到按搜索排序的结果
更新2
我有一个类MediaViewModel
,用于创建对象列表,如下所示:
var result = db.Medias.Where(TagsEnum => TagsEnum.ToString() == searchString);
return View(result.OrderBy(it => it.title));
public class MediaViewModel
{
public List<Media> media { get; set; }
public List<Video> video { get; set; }
}
我得到一个错误:
传入字典的模型项的类型为System.Linq.Enumerable+WhereListIterator 1[PhClub.Models.Media],但此字典需要PhClub.Models.MediaViewModel类型的模型项。
如果我把它设置为
`@model IEnumerable<PhClub.Models.Media>
@foreach (var b in Model)
{}`
`@model IEnumerable
@foreach(模型中的var b)
{}`
它表示,类型为“媒体”的值不能转换为字符串。
我想我需要改变
SearchMedia
方法来支持MediaView
类,但我还没有弄明白。感谢您的帮助您应该将其分配给一个变量并使用它
var result = db.Medias.Where(i => i.TagsEnum.ToString() == searchString);
return View(result.OrderBy(it => it.Title));
您应该将其分配给一个变量并使用它
var result = db.Medias.Where(i => i.TagsEnum.ToString() == searchString);
return View(result.OrderBy(it => it.Title));
“它不起作用”很少是一个好的问题陈述。您是没有得到任何结果,还是某种类型的异常?它不是对结果进行排序,只是显示每个对象,好像搜索方法没有启动一样。您没有使用where子句的结果。在return语句中,您只是将整个DbSet排序为Media表。@sajeetharan的答案纠正了这一点。你重建了你的项目吗?正在尝试,VS崩溃了,现在我在ApplicationDbContext命名空间中出现了一些错误。。。一旦我解决了它,我会重新尝试。“它不工作”很少是一个好的问题陈述。您是没有得到任何结果,还是某种类型的异常?它不是对结果进行排序,只是显示每个对象,好像搜索方法没有启动一样。您没有使用where子句的结果。在return语句中,您只是将整个DbSet排序为Media表。@sajeetharan的答案纠正了这一点。你重建了你的项目吗?正在尝试,VS崩溃了,现在我在ApplicationDbContext命名空间中出现了一些错误。。。一旦我把它整理好,我会重新尝试一下。我是否理解正确,我需要这样修改它:var result=db.Medias.Where(TagsEnum=>TagsEnum.ToString()==searchString);因为我在课堂上没有任何i参数?如果是这样,我尝试了它,但它仍然没有进行搜索,因为我仍然显示未排序的所有对象。我是否正确理解,我需要这样更改它:var result=db.Medias.Where(TagsEnum=>TagsEnum.ToString()==searchString);因为我在课堂上没有任何i参数?如果是这样,我尝试了它,但它仍然没有进行搜索,因为我仍然显示所有未排序的对象。