Frage

Ich bin derzeit die EntityFramework mit meinem ASP.NET MVC-Projekt zu einer MySQL-Datenbank und einen meiner Entitäten zu binden, Produkt, hat eine Eigenschaft Images eine Sammlung von Produktbildern enthält. Ich habe eine Form gebaut, damit der Benutzer ein bestimmtes Produkt zu modifizieren und diese Form enthält Felder für so gut zu diesem Produkt verbunden sind alle Bilder bearbeiten. Nach der Lektüre Phil Haack und < a href = „http://www.distribucon.com/blog/ASPNETMVCRC1BindingAList.aspx“ rel = „nofollow noreferrer“> Dan Geizhalses Beiträge zu diesem Thema habe ich eine anständige Vorstellung davon, was geschehen muss, aber ich scheint es nicht aus irgendeinem Grund funktioniert ...

Hier ist meine Produktform:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<KryptonCMS.Models.Product>" %>
<%@ Import Namespace="KryptonCMS.Core" %>
<%@ Import Namespace="KryptonCMS.Models.ViewModels" %>

<% using (Html.BeginForm())
   {%>

        <ul class="gallery">
            <%
                var index = 0;
                foreach (var image in Model.ImageList.OrderBy(p => p.Order))
                {
            %>
            <li>
                <% Html.RenderPartial("ProductImageForm", image, new ViewDataDictionary(ViewData) { { "index", index } }); %>
            </li>
            <%
                index++;
                }
            %>
        </ul>

    <p>
        <input type="submit" name="btnSave" value="Save" />
        <input type="submit" name="btnCancel" value="Cancel" />
    </p>
<% } %>

Und hier ist die Definition für ProductImageForm:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<KryptonCMS.Models.ProductImage>" %>
<%@ Import Namespace="KryptonCMS.Core" %>
<div>
    <%
        var fieldPrefix = string.Format("images[{0}]", ViewData["index"]); %>
    <%=Html.Hidden(fieldPrefix + "ID", Model.ID) %>
    <img src="<%=UtilityManager.GetProductImagePath(Model.Product.ID, Model.FileName, true) %>"
        alt="" /><br />
    <label for="Description">
        Description:</label>
    <%=Html.TextBox(fieldPrefix + "Description", Model.Description) %><br />
    <label for="Order">
        Order:</label>
    <%=Html.TextBox(fieldPrefix + "Order", Model.Order)%><br />
</div>

Und schließlich meine Products Aktionen:

    public ActionResult Edit(int id)
    {
        var product = productsRepository.GetProduct(id);

        if (product == null)
            return View("NotFound", new MasterViewModel());

        // else
        return View(ContentViewModel.Create(product));
    }

    [AcceptVerbs(HttpVerbs.Post), ValidateInput(false)]
    public ActionResult Edit(int id, FormCollection formCollection)
    {
        var product = productsRepository.GetProduct(id);

        if (formCollection["btnSave"] != null)
        {
            if (TryUpdateModel(product) && TryUpdateModel(product.Images, "images"))
            {
                productsRepository.Save();

                return RedirectToAction("Details", new { id = product.ID });
            }
            return View(ContentViewModel.Create(product));
        }

        // else
        return RedirectToAction("Details", new { id = product.ID });
    }

Die HTML-Ausgabe für einen einzelnen ProductImageForm sieht wie folgt aus:

<div>
    <input id="images[0]ID" name="images[0]ID" type="hidden" value="1" />
    <img src="/Content/ProductGallery/3/thumbs/car1.jpg"
        alt="" /><br />
    <label for="Description">
        Description:</label>
    <input id="images[0]Description" name="images[0]Description" type="text" value="FAST CAR" /><br />
    <label for="Order">

        Order:</label>
    <input id="images[0]Order" name="images[0]Order" type="text" value="1" /><br />
</div>

Ich habe alle möglichen Methoden versucht, meine Form zu reorganisieren die Bildersammlung einschließlich Entnahme der Produktform und es in seinem eigenen platzieren (was ich wirklich nicht wollen, zu tun), aber nichts funktioniert. Gibt es etwas blatatently falsch mit meinem Ansatz hier?

War es hilfreich?

Lösung

Sie sind fehlende Punkte in Eingänge Namen:

<%= Html.Hidden(fieldPrefix + ".ID", Model.ID) %>
<%= Html.TextBox(fieldPrefix + ".Description", Model.Description) %>
<%= Html.TextBox(fieldPrefix + ".Order", Model.Order) %>

Überprüfen Sie dieses Blog-Post: http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries. aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top