El problema que tengo es que me estoy volviendo una foto única de registro de mi base de datos, que está trabajando bien en los detalles de mi vista. Sin embargo, en el controlador de debajo de los detalles también estoy compilando una lista de objetos, lo que quiero mostrar en mi vista de detalles como este contiene fotos adicionales que están asociados. Así que en la parte inferior de la vista se debe enumerar cada uno de los que se hace referencia con nombre y foto. Estoy usando la Galleria.Io visor de fotos y quiero conectarlo en ella.

Cuando trato y el bucle a través de cada elemento en la lista, estoy consiguiendo:

{"Object reference not set to an instance of an object."}

Código

PhotosController

public ActionResult Details(int id = 0)
{
    Photos photos = db.FindPhotoById(id);
    if (photos == null)
    {
        return HttpNotFound();
    }

    List<Photos> photoList = GetImagesFromFilmID(8);

    ViewData["NumberOfImages"] = photoList.Count().ToString();
    ViewData["PhotoList"] = photoList;

    return View(photos);
}

public List<Photos> GetImagesFromFilmID(int filmID = 8 )
{

    List<Photos> photos;

    photos = (from p in db.Photos
              where p.PhotoDescription == "8"
              select p).Take(filmID).ToList();

    return photos;
}

La Vista De Detalles

@model TestingMVCQA.Models.Photos
@*@model IEnumerable<TestingMVCQA.Models.Photos>*@
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<fieldset>
<legend>Photos</legend>
<div class="display-label">
@Html.DisplayNameFor(model => model.PhotoName)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.PhotoName)
</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.PhotoDescription)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.PhotoDescription)
</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.PhotoFileName)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.PhotoFileName)
</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.ImageMimeType)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.ImageMimeType)
</div>
<script src="@Url.Content("~/Scripts/jquery-1.7.1.js")"></script>
<script src="@Url.Content("~/Scripts/galleria-1.3.6.js")"></script>
<style>
.galleria{ width: 900px; height: 500px; background: #000 }
</style>
@if (Model.PhotoFile != null) {
<div class="galleria">
<img src="@Url.Action("GetImage", "Photos", new { id = Model.PhotoID })" data-title="My title" data-description="My description" />
<img src="@Url.Action("GetImage", "Photos", new { id = 5 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 6 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 7 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 8 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 9 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 10 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 11 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 12 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 13 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 14 })" />
</div>
}
<script>
Galleria.loadTheme(src = "@Url.Content("~/Scripts/galleria.classic.js")");
Galleria.run('.galleria');
</script>
</fieldset>
<p>Your favorite fruit is:</p>@ViewData["NumberOfImages"]
<p>
@foreach (var item in ViewData["NumberOfImages"] as IEnumerable<TestingMVCQA.Models.Photos>)
{
}
</p>
<p>
@Html.ActionLink("Edit", "Edit", new { id=Model.PhotoID }) |
@Html.ActionLink("Back to List", "Index")
</p>

En la vista de índice tengo:

@model IEnumerable<TestingMVCQA.Models.Photos>

Que me permite utilizar el foreach y entiendo por qué, pero como que me estoy volviendo un único objeto en la vista de detalles que estoy un poco atascado en cómo resolver el problema. Así que cuando todo es trabajo, a continuación, puedo reemplazar el GetImage llamada y foreach en la propia imagen.

Si usted requiere ningún código adicional o explicación, a continuación, hágamelo saber.

  • ur ViewData[«NumberOfImages»] tiene en cuenta de photolist acaba de convertir a entero…
  • has probado a inicializar este fuera de el método List<Photos> photoList algo `Lista de<Fotos> photoList = new List<Fotos>();
  • la pregunta u han publicado es el mal uso ViewData[«PhotoList»] en bucle foreach…
  • En el bucle foreach ¿qué debo escribir para mostrar el nombre de archivo para ver.
InformationsquelleAutor user2672720 | 2014-07-27

1 Comentario

  1. 14

    Está utilizando ViewData["NumberOfImages"] en bucle foreach que está mal.

    Su bucle foreach debería tener este aspecto :-

    @foreach (var item in ViewData["PhotoList"] as IEnumerable<TestingMVCQA.Models.Photos>)
    {
    //@item.FileName //instead .FileName use property which you have used in your model class
    }

Dejar respuesta

Please enter your comment!
Please enter your name here