ASP.Net MVC5 - "无法找到资源"错误

时间:2016-12-05 13:44:33

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

新手在这里。我在请求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]

0 个答案:

没有答案