2014-12-01 3 views
0

У меня есть контроллер с ActionResult, который получает три массива из представления в HttpPost. Массивами являются Id (tableId) позиция сверху (positionY) и позиция слева (positionX). Когда вы нажимаете save, ActionResult необходимо обновить все позиции из соответствующих идентификаторов в базе данных.Linq query foreach element в массиве

Это мой контроллер:

private BonTempsDbContext db = new BonTempsDbContext(); 

[HttpPost] 
public ActionResult Index(int[] tableId, int[] tablePosX, int[] tablePosY) 
{ 
    int i = 0; 
    foreach (var id in tableId) 
    { 
     int number = tableId[i]; 
     Tafel tafel = db.Tafel 
      .Where(x => x.id == number) 
      .ToList(); 
     db.Entry(tafel).State = EntityState.Modified; 
     i++; 
    } 
    return View(db.Tafel.ToList()); 
} 

Я получаю ошибку:

Cannot implicitly convert type 'System.Collections.Generic.List' to 'BonTempsMVC.Tafel'

Это мой взгляд, если вы ван получить что-то полезным из него.

@model IEnumerable<BonTempsMVC.Tafel> 

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


<h2>Index</h2> 
<div class="VoegToeBtn"> 
    <a href="/tafel/create"> 
     <span class="btn btn-default"> 
      <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Maak nieuw menu aan 
     </span> 
    </a> 
</div> 
@using (Html.BeginForm()) 
    { 
    @Html.AntiForgeryToken() 

    <div id="tablewrapper"> 

       @foreach (var item in Model) 
       { 
        var positionXId = "posX" + item.id; 
        var positionYId = "posY" + item.id; 
        <div class="draggable ui-widget-content" id="@Html.DisplayFor(ModelItem => item.id)"> 
         <input type="text" hidden name="tableId" value="@Html.DisplayFor(ModelItem => item.id)" /> 
         <input type="text" hidden name="tablePosX" id="@positionXId" value="" /> 
         <input type="text" hidden name="tablePosY" id="@positionXId" value="" /> 
         <p>@Html.DisplayFor(ModelItem => item.tafelNaam)</p> 
        </div> 

       } 
    </div> 
    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" value="Create" class="btn btn-default" /> 
     </div> 
    </div> 
} 
<script> 
$(".draggable").draggable({ 
    snap: ".draggable", 
    snapMode: "outer", 
    stop: function (event, ui) { 
     var finalOffset = $(this).offset(); 
     var finalxPos = finalOffset.left; 
     var finalyPos = finalOffset.top; 
     var itemId = $(this).attr('id'); 
     var posXid = "posX" + itemId; 
     var posYid = "posY" + itemId; 
     $('input:text[id="' + posXid + '"]').attr("value", finalxPos); 
     $('input:text[id="' + posYid + '"]').attr("value", finalyPos); 
    }, 
}); 
</script> 

И Tafel модель:

namespace BonTempsMVC 
{ 
    public class Tafel 
    { 
     public int id { get; set; } 

     public string tafelNaam { get; set; } 

     public bool beschikbaar { get; set; } 

     public float positionY { get; set; } 

     public float positionX { get; set; } 
    } 
} 
+1

Можете ли вы опубликовать свое определение объекта Tafel? – edita

+0

Я отредактировал мой вопрос с моей моделью tafel. –

ответ

2

Попробуйте это: -

List<Tafel> tafel = db.Tafel 
       .Where(x => x.id == number) 
       .ToList(); 

Здесь List<Tafel> возвращается, но вы храните, что в Tafel объекте.
Если вы уверены, что в Tafel сущности будет только один пункт с соответствующими id затем сделать это: -

Tafel tafel = db.Tafel.FirstOrDefault(x => x.id == number); 

Как, предложенный @DavidG вы также можете сделать это: -

Tafel tafel = db.Tafel.Find(number); 
+1

Альтернативно, 'Tafel tafel = db.Tafel.Find (number);' будет работать тоже. – DavidG

+0

Спасибо! Действительно полезно и быстро! Теперь нужно выяснить, как сделать запрос обновлять позиции из каждой таблицы. –