2015-02-09 2 views
0

Это модель:MVC 4 ошибки для объекта Referance

[Table("Person")] 
public class Persons 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string Gender { get; set; } 
    public string Location { get; set; } 
} 

Это мой DbContext для выше класс модели.

public class PersonContext : DbContext 
{ 
    public DbSet<Persons> persons { get; set; } 
} 

Это мой контроллер Класс:

public class PersonController : Controller 
{ 
    // 
    // GET: /Person/ 
    public ActionResult Index(int id) 
    { 
     PersonContext PC = new PersonContext(); 
     Persons PS = PC.persons.SingleOrDefault(pr => pr.ID == id); 
     return View(PS); 
    } 
} 

Это мой Вид:

'@model MVCDemo.Models.Persons 

@{ 
ViewBag.Title = "Index"; 
Layout = "~/Views/_ViewStart.cshtml"; 
} 

<h2>Index</h2> 

<div> 
<h4>Personal Information</h4> 
<hr /> 
<dl class="dl-horizontal"> 
    <dt> 
     @Html.DisplayNameFor(model => model.Name) 
    </dt> 

    <dd> 
     @Html.DisplayFor(model => model.Name) 
    </dd> 

    <dt> 
     @Html.DisplayNameFor(model => model.Gender) 
    </dt> 

    <dd> 
     @Html.DisplayFor(model => model.Gender) 
    </dd> 

    <dt> 
     @Html.DisplayNameFor(model => model.Location) 
    </dt> 

    <dd> 
     @Html.DisplayFor(model => model.Location) 
    </dd> 

    </dl> 
</div> 
<p> 
@Html.ActionLink("Edit", "Edit", new { id = Model.ID }) | 
@Html.ActionLink("Back to List", "Index") 
</p>' 

В выше смелой области я получаю ошибку

Object reference not set to an instance of an object.

Сообщать меня причина, почему я получаю эту ошибку и каково это решение.

+0

Что ваш текущий URL. –

ответ

0

SingleOrDefault вернет «по умолчанию» (который является null для ссылочных типов, например экземпляров класса), если объект не найден в соответствии с заданными условиями. Наиболее вероятной причиной ошибки, которую вы описываете, является ваш экземпляр объекта Persons.

+0

Так что я могу сделать в месте SingleOrDefault, могу ли я использовать только Single? –

+0

Вам нужно либо проверить, что значение, которое вы передаете в оператор 'return View (PS)', не равно null. Обычно это делается как «if» в вашем контроллере, перенаправляя запросы, которые недействительны на странице «Человек не найден» или что-то в этом роде. – TZHX

+0

Я сделал это: PersonContext PC = новый PersonContext(); Линия 17: Лица PS = новые лица(); Строка 18: PS = PC.persons.Single (pr => pr.ID == id); Строка 19: if (PS == null) Строка 20: {Теперь im получает эту ошибку: Последовательность не содержит элементов –

0

Как указано в комментариях эта ошибка из-за лица objecte становится нулевым, сделать чек нуль, как это с помощью оператора нуль-коалесценции (??)

public ActionResult Index(int id) 
    { 
     PersonContext PC = new PersonContext(); 
     Persons PS = PC.persons.SingleOrDefault(pr => pr.ID == id); 
     PS = PS ?? new Persons(); 
     return View(PS); 
    } 
+0

Теперь это err: -Type 'ASP._Page_Views__ViewStart_cshtml' не наследуется от 'System.Web.WebPages.WebPageBase ». –

+0

Это похоже на совершенно другую ошибку, связанную с вашим кодом в файле или конфигурации в режиме просмотра. – ssilas777

Смежные вопросы