新手在这里。我在请求url / event / details / 3 时收到错误The resource cannot be found.
。
我使用MVVM。
我的架构很简单。我有"事件","人"和#34; PersonInEvent"表。 " PersonInEvent"是另外两个人的联结表(持有外键)。
我试图在"详细信息"使用其ID( / event / details / 3 )查看事件的数据。该事件的ID被传递给"详细信息" controller action,它实例化我的ViewModel,它包含一个事件对象。我将此事件设置为在创建viewmodel时收到的id。
根据我的控制器(见下文),我收到错误,因为vm.Event == null
。但我找不到解决这个问题的方法。我觉得这是一个基本的编程问题,比如我的"事件"我的viewmodel中的属性已创建。但我仍然无法找到解决方案。提前谢谢。
我的控制器的详情操作:
[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]
。