我想在我的主页上显示有效公告。
这是我的模特:
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中给出错误
答案 0 :(得分:0)
首先,永远不要将问题发布到Stack Overflow并说出#34;它会给我一个错误&#34;然后忽略说它是什么错误。 Stack Overflowers不喜欢通灵调试(试图弄清楚你做过的重要事情并不在乎告诉他们)。
其次,问题是静态方法没有状态。他们无法访问成员对象,因为他们没有访问的实例。因此,他们访问的任何数据也必须是静态的。
你的问题的解决方案是创建一个新的上下文(你应该总是这样做)
using(var db = new ApplicationDbContext())
{
// your code
}
一个重要的事情是,由于DbContext将在调用结束时被释放,因此您需要确保在返回之前完全执行查询。
return feeds.ToList();