2017-04-23 63 views
0

我的项目的一部分,我需要找到一种方法来搜索我的对象的字符串,并显示在视图中的结果。感谢您的帮助。 在我MainMedia视图我有一个sidesection是我的字符串值手动传递到SearchMedia方法:通过字符串值MVC搜索方法5

@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字符串,然后在SearchMedia视图中显示一个对象。

这里是我的传媒类

public class Media 
{ 
    public int Id { get; set; } 
    public string title { get; set; } 
    public string description { get; set; } 
    public string body { get; set; } 
    public string ImagePath { get; set; } 
    public string VideoLink { get; set; } 
    public string Source { get; set; } 
    public string tags { get; set; } 
    public TagsEnum TagsEnum { get; set; } 
} 

TagsEnum类

public enum TagsEnum 
    { 
     [Display(Name = "Astronomy and space")] 
     Astronomy, 
     [Display(Name = "World around us")] 
     World, 
     [Display(Name = "Movies, video")] 
     Movies 
} 

和finaly MediaMainControllerSearchMedia方法

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)); 

,但我仍然没有看到结果被搜索排序

更新2 我有一个类MediaViewModel我用于创建对象列表,如下所示:

public class MediaViewModel 
    { 
     public List<Media> media { get; set; } 
     public List<Video> video { get; set; } 

    } 

如果我成立SearchMedia查看这样

@model PhClub.Models.MediaViewModel 
@foreach (var b in Model.media) 
{} 

我得到一个错误: 传递到字典的模型产品类型System.Linq.Enumerable的+ WhereListIterator 1 PhClub.Models.Media] ,但该字典需要PhClub.Models.MediaViewModel类型的模型项目。 如果我将其设置为

`@model IEnumerable<PhClub.Models.Media> 
    @foreach (var b in Model) 
    {}` 

跟它型“媒体” 值不能转换为字符串。 我想我需要改变SearchMedia方法来支持MediaView类,但我还没有弄明白。帮助表示赞赏

+0

“它不工作”是很少一个很好的问题陈述。你没有得到任何结果,或某种例外? –

+0

它不排序结果,只是显示每个对象,就好像搜索方法没有启动 –

+0

您没有使用where子句的结果。在你的return语句中,你只是对媒体表的整个DbSet进行排序。 @sajeetharan的答案纠正了这一点。 –

回答

2

你应该把它分配给一个变量,并使用它,

var result = db.Medias.Where(i => i.TagsEnum.ToString() == searchString); 
return View(result.OrderBy(it => it.Title)); 
+0

我是否理解正确的,我需要改变它像这样:var result = db.Medias.Where(TagsEnum => TagsEnum.ToString()== searchString);因为我在课堂上没有任何参数?如果是这样,我尝试了它,它仍然没有进行搜索,因为我仍然显示所有对象未排序。 –