Asp.Net MVC 5选择元素

时间:2014-08-02 13:41:46

标签: asp.net-mvc asp.net-mvc-5

我想在我的主页上显示有效公告。

这是我的模特:

public class Duyuru {
    public int ID { get; set; }

    [Display(Name="Mesaj")]
    public string Message { get; set; }

    [Display(Name="Başlık")]
    public string Title { get; set; }

    [Display(Name="Aktif")]
    public bool Active { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString="{0:dd/MM/yyyy}")]
    public DateTime UploadDate { get; set; }
}

这是我的控制器:

//if i don't do this static, it's giving an error.
public class Announcement{
    public static List<Duyuru> GetDuyuru(ApplicationDbContext db) {
        try {
            var feeds = from feed in db.Duyuru.ToList()
                        select new Duyuru {
                            Title = feed.Title,
                            Message = feed.Message,
                            ID = feed.ID,
                            Active = feed.Active        
                        };        
            return feeds.ToList();
        } catch (Exception) {
            throw;
        }
    }
}

这是我的观点:

@model Tuple<.. , .. , List<DT_Muhasebe.Models.Duyuru>>
     <table class="table table-hover">

          @{
             counter = 0;
             try{
               foreach (var item in Model.Item3){
                 if (item.Active == true){
                   <tr><td><a href="Duyuru/Details/@item.ID">@item.Title</a></td></tr>
                   counter += 1;
                 }
                 if (counter == 6) { break; }
                }
              } catch (Exception) {
                <tr><td>Yeni duyuru bulunmamaktadır.</td></tr>
              }
            }
        </table>

这是我的HomeController:

var allModels = new Tuple<.. , .. , List<Duyuru>>(.., .. ,
RssReaderController.Announcement.GetDuyuru(db).OrderByDescending(e => e.UploadDate));
return View(allModels);

此代码因某些原因无效。我希望有人可以提供帮助。之所以从RssReasderController而不是DuyuruController获取它是因为我使ApplicationDbContext静态,其他功能如Create或Edit不起作用,如果我不做静态我收到错误GetDuyuru因为它是静态的而db.Duyuru不是。如果我使GetDuyuru类非静态,那么它在HomeController中给出错误

1 个答案:

答案 0 :(得分:0)

首先,永远不要将问题发布到Stack Overflow并说出#34;它会给我一个错误&#34;然后忽略说它是什么错误。 Stack Overflowers不喜欢通灵调试(试图弄清楚你做过的重要事情并不在乎告诉他们)。

其次,问题是静态方法没有状态。他们无法访问成员对象,因为他们没有访问的实例。因此,他们访问的任何数据也必须是静态的。

你的问题的解决方案是创建一个新的上下文(你应该总是这样做)

using(var db = new ApplicationDbContext())
{
    //  your code
}

一个重要的事情是,由于DbContext将在调用结束时被释放,因此您需要确保在返回之前完全执行查询。

return feeds.ToList();