新手在這裏。請求網址/event/details/3時,我收到錯誤The resource cannot be found.
。 我使用MVVM。ASP.Net MVC5 - 「資源無法找到」錯誤
我的模式很簡單。我有「事件」,「人」和「PersonInEvent」表。 「PersonInEvent」是另外兩個(持有外鍵)的聯結表。
我試圖在「詳細信息」視圖中顯示其ID爲(/event/details/3)的事件數據。該事件的ID傳遞給「Details」控制器動作,它實例化了我的ViewModel,它包含一個事件對象。我將此事件設置爲具有創建視圖模型時收到的標識的事件。
根據我的控制器(見下文),我得到的錯誤,因爲vm.Event == null
。但我找不到解決此問題的方法。我感覺這是一個基本的編程問題,比如我的viewmodel中的「Event」屬性是如何創建的。但我仍然無法弄清楚解決方案。提前致謝。
我的控制器的詳細動作:
[HttpPost] // this was the problem
[ValidateAntiForgeryToken]
public ActionResult Details(int id)
{
var vm = new EventDetailsViewModel(id);
if (vm.Event == null)
{
return HttpNotFound(); // I get the error because of this imo
}
return View("Details", vm);
}
我的視圖模型:
public class EventDetailsViewModel
{
private readonly ApplicationDbContext _db = new ApplicationDbContext();
private readonly int _eventIdVm;
private Event _event;
public EventDetailsViewModel(int id)
{
_eventIdVm = id;
_event.EventId = id;
}
public Event Event
{
get
{
return _event = _db.Event.Find(_eventIdVm);
}
set { _event = value; }
}
public List<Person> Persons
{
get
{
if (!_db.PersonInEvent.Any(pe => pe.EventId == _eventIdVm))
{
return Enumerable.Empty<Person>().ToList();
}
var personsOfEvent = _db.PersonInEvent.Where(pe => pe.EventId == _eventIdVm)
.Select(pe => pe.Person)
.ToList();
return personsOfEvent;
}
}
}
我以防萬一觀點:
@model BillSplittingWebApp.ViewModels.EventDetailsViewModel
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<div>
<h4>Event</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Event.EventName)
</dt>
<dd>
@Html.DisplayFor(model => model.Event.EventName)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Event.EvenTimeBegin)
</dt>
<dd>
@Html.DisplayFor(model => model.Event.EvenTimeBegin)
</dd>
</dl>
</div>
編輯:問題是屬性[HttpPost]
那我忘了刪除acti上。
的'Details'方法只以上被當窗體發佈,因爲該屬性,稱爲[HttpPost] 。你是否也有一個'Details'方法使用屬性[HttpGet]?如果是這樣,請在您的問題中包含該代碼。 –
@Peter B這就是它的確...我試圖通過post方法發送id,並且我忘記刪除屬性。 –
注意,這不是MVVM,它是MVC。這就是爲什麼它被稱爲aspnet * MVC *。 – Will