我有一个叫PageModels的模型
public class PageModels
{
    public int id { get; set; }
    public string title { get; set; }
    [DataType(DataType.MultilineText)]
    [AllowHtml]
    public string content { get; set; }
    public int parent { get; set; }
    [DataType(DataType.Date)]
    public DateTime created_at { get; set; }
    [DataType(DataType.Date)]
    public DateTime updated_at { get; set; }
    [DataType(DataType.Date)]
    public DateTime published_at { get; set; }
}基于这个模型,我有一个叫做PagesController的控制器。这里我有一个方法:
    public ActionResult showPage(string myTitle)
    {
        var query = from a in db.Pages
                    where a.title.Contains(myTitle)
                    select a;
        return View(db.Pages.FirstOrDefault());
    }我希望能够在返回值中获得具有myTitle中给定标题的页面的content属性。我还没能找到一个好的方法来做到这一点。
//编辑
我一直犯的那个错误都是我的错。在尝试修复我的问题和实现您的解决方案之间,我将方法返回类型更改为PageModels,这就是它不断抛出该错误的原因。现在它可以工作了,但是视图没有显示任何内容。我会试着自己解决这个问题的,谢谢你的帮助。
发布于 2013-05-02 21:38:30
您将获得对第一行中的变量query进行过滤的结果,但是您将向视图返回其他内容(从DB读取所有页面并从集合中获取第一项)。
您需要从变量query中获取项目,该变量包含过滤器的结果。
public ActionResult showPage(string myTitle)
{
    var query = from a in db.Pages
                where a.title.Contains(myTitle)
                select a;
    return View(query.FirstOrDefault());
}确保在FirstOrDefault之后检查null,否则在集合中没有记录时会遇到异常。
public ActionResult showPage(string myTitle)
{
    var query = from a in db.Pages
                where a.title.Contains(myTitle)
                select a;
    var item=query.FirstOrDefault();
    if(item!=null)
       return View(item);
    else
       return View("NotFound");  //Let's show a view about item not found
}发布于 2013-05-02 21:40:44
您返回的不是查询中的选定内容,而是db.pages中的第一条记录。公共字符串showPage(string myTitle)
 {
        var query = from a in db.Pages
                    where a.title.Contains(myTitle)
                    select a;
        return View(db.Pages.FirstOrDefault());
    }相反,您应该这样做:
public ActionResult showPage(string myTitle)
    {
        var query = (from a in db.Pages
                    where a.title.Contains(myTitle)
                    select a).FirstOrDefault<PageModels>();
        return View(query);
    }这将发送只包含第一个页面的模型,该页面的标题包含您的title参数,您可以根据需要在标记中使用该参数:
<h1>@Html.Display(@Model.title)</h1>请注意,我已经显式地将结果键入为PageModel,并将select部分括在括号中。这很重要--如果不告诉Linq使用哪种类型,它会给出一个通用的结果,而不是数据表示的对象的实际实例。如果需要尚未定义的类型,可以使用
var query=(from a in db.Pages where a.title.Contains(myTitle)
                    select new {a.Title, a.Author});这将为您提供一个"on the fly“对象,该对象具有基于数据中的Title和Author列的title和author属性。
希望这能帮上忙--我们都做过。
乔伊
发布于 2013-05-02 21:42:49
将查询传递给视图
var query = from a in db.Pages
                where a.title.Contains(myTitle)
                select a;
var result = query.FirstOrDefault();
return View (result);在视图中使用
@HTML.Displyfor(Model.content)https://stackoverflow.com/questions/16339357
复制相似问题