2015-08-13 4 views
2

Недавно было потрачено некоторое время в сторону от MVC и вернуться к старому проекту, пытаясь переписать код, который я делал ранее, но притормозил, удалив элемент из списка, с EF отлично, но я стараюсь не использовать Entity Framework для управления моими данными модели. Я хочу использовать мою модель в качестве базы данных, пока я не с удовольствием подчинюсь.Удалить проблему с помощью MVC 5 Список

Я вновь написал вопрос, чтобы упростить его и не сбрасывать грузы кода, при нажатии кнопки удаления я получаю ошибку ниже:

Словарь параметров содержит пустую запись для параметра «идентификатор» непустого типа «System.Int32» для метода «System.Web.Mvc.ActionResult RemoveRequested (Int32)» в «Project.Views.requestedController». Необязательный параметр должен быть ссылочным типом, нулевым типом или объявлен как необязательный параметр. Имя параметров: параметры

Я думаю, что идентификатор обычно обрабатывается EF, но я думал, что [key] будет обрабатывать это автоприращение - это возможность сортировки?

Надеюсь, что это имеет смысл. Динамический я действительно не забочусь, поэтому в идеале нет jQuery/java-скрипта, если только не нужно.

Код:

Частичный вид

@model IEnumerable<Project.Models.Allocation> 
@using (Html.BeginForm()) 
{ 
    if (Model != null) 
    { 
     foreach (var ri in Model) 
     { 
      <div class="ui-grid-c ui-responsive"> 
       <div class="ui-block-a"> 
        <span> 
         @ri.one 
        </span> 
       </div> 
       <div class="ui-block-b"> 
        <span> 
         @ri.two 
        </span> 
       </div> 
       <div class="ui-block-c"> 
        <span> 
         @ri.three 
        </span> 
       </div> 
       <div class="ui-block-d"> 
        <span> 
         @Html.ActionLink("Delete", "RemoveRequested", new { id = ri.id }) 
        </span> 
       </div> 
      </div> 
     } 
    } 

Модели

public class Allocation 
    { 
     [Key] 
     public int? id { get; set; } 
     [Required] 
     public string one { get; set; } 
     [Required] 
     public string two { get; set; } 
     [Required] 
     public string three { get; set; } 
    } 
public class Container 
{ 
    [key] 
    public int? id { get;set; } 
    [Required] 
    public List<Allocation> requested { get;set; } 
} 

контроллер Действие Метод

public ActionResult RemoveRequested(int id) 
     { 
      var newContainer = (Container)Session["containerSession"]; 
      if(newAllocation.requested != null) 
      { 
       var del = newContainer.requested.Find(m => m.id == id); 
       newContainer.requested.Remove(del); 
      } 
      Session["containerSession"] = newContainer; 
      return RedirectToAction("Index"); 
     } 

ответ

2

У меня не было ключа с нулевым значением и добавьте атрибут [DatabaseGenerated(DatabaseGeneratedOption.Identity)].

Изменение Allocation изменения типа это:

public class Allocation 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int id { get; set; } 
    [Required] 
    public string one { get; set; } 
    [Required] 
    public string two { get; set; } 
    [Required] 
    public string three { get; set; } 
} 

Это будет соответствовать вашему параметру действия в настоящее время. Однако, если ваш ключ равен нулю, у вас должны быть другие проблемы, и теперь они будут использовать значение по умолчанию, равное нулю.

Другим вариантом был бы изменить свои действия, чтобы принять обнуляемый тип в качестве параметра:

public ActionResult RemoveRequested(int? id) 

Pls, обратите внимание, я хотел бы также использовать HttpPost для удаления, а не HttpGet как вы сейчас делаете.

+0

ОК - спасибо, сделал несколько изменений, теперь получив «Запрошенный URL:/Container/RemoveRequested/0' - поэтому идентификатор не назначается, как бы лучше всего это сделать? – PurpleSmurph

+0

Добавьте это на свой ключ '[DatabaseGenerated (DatabaseGeneratedOption.Identity)]'. :) – hutchonoid

+0

Это требует EF? Что это значит? Я хочу избежать EF, поэтому просто использую модель как временную db перед отправкой фактического db. – PurpleSmurph