Post Liste der Liste der model-Objekt zum Controller ASP.NET MVC
Form wie diese
ViewModel:
public class ProductViewModel
{
public string Product { get; set; }
public IEnumerable<SizeColorQuantityViewModel> SizeColorQuantities { get; set; }
}
public class SizeColorQuantityViewModel
{
public string ColorId { get; set; }
public List<SizeAndQuantity> SizeAndQuantities { get; set; }
}
public class SizeAndQuantity
{
public int SizeId { get; set; }
public int Quantity { get; set; }
}
Anzeigen:
@model ProjectSem3.Areas.Admin.Models.ProductViewModel
@{
ViewBag.Title = "Create";
Layout = "~/Areas/Admin/Views/Shared/_Layout.cshtml";
string[] ListColor = { "Red", "Blue" };
string[] ListSize = { "S", "M", "L", "XL" };
}
@for (var i = 0; i < ListColor.Length; i++)
{
<div class="form-group">
<label class="col-md-2 control-label">Color:</label>
<div class="col-md-2">
@Html.TextBox("[" + i + "].ColorId", null, new { @Value = ListColor[i], @class = "form-control", @readonly = "readonly" })
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Size and Quantity:</label>
@for (var j = 0; j < ListSize.Length; j++)
{
<div class="col-md-2">
@Html.TextBox("[" + i + "][" + j + "].SizeAndQuantities.SizeId", null, new
{
@class = "form-control",
@style = "margin-bottom: 15px",
@Value = ListSize[j],
@readonly = "readonly"
})
@Html.TextBox("[" + i + "][" + j + "].SizeAndQuantities.Quantity", null, new { @class = "form-control" })
</div>
}
</div>
}
Controller:
//GET: Admin/Product
public ActionResult Create()
{
return View();
}
//POST: Admin/Product
[HttpPost]
public ActionResult Create(ProductViewModel product, IEnumerable
<SizeColorQuantityViewModel>
sizeColorQuantity, IEnumerable
<SizeAndQuantity>
sizeAndQuantity)
{
return View();
}
Kann ich get-Wert übergeben wird, aus dem ViewModel IEnumerable<SizeColorQuantityViewModel> sizeColorQuantity
Controller. Aber mit diesem Modell IEnumerable<SizeAndQuantity> sizeAndQuantity
, ich kann es gar nicht mehr Wert.
Ursache dafür ist die 2-D-Array so, ich habe keine Ahnung für diese Probleme. Könnten Sie mir beibringen, wie zu binden Wert für IEnumerable<SizeAndQuantity> sizeAndQuantity.
- Ihre Erzeugung Eingänge mit name-Attribute, die sich nicht auf Ihr Modell, aber nicht eine Menge von dieser code macht Sinn. Warum haben Sie Sammlungen
ListColor
undListSize
aus Ihrer Sicht? Sind Sie versuchen, Bearbeiten Sie die Menge, die für ein Produkt mit Rot/Klein, Rot/Mittel und Rot/Groß etc, und das gleiche wieder für die Blau/Klein, Blau/Medium, etc? - Ja, ich denke auch eine Menge von Möglichkeiten, um post zu einem Produkt mit Größe, Farbe und Menge. Haben Sie irgendwelche anderen Möglichkeiten? Wenn es Ihnen nichts ausmacht, könnten Sie beschreiben, mich mehr? Vielen Dank 😀
- Sie brauchen, um eine Menge von änderungen, um diese Arbeit zu machen. Können Sie ändern
IEnumerable<SizeColorQuantityViewModel>
zuList<SizeColorQuantityViewModel>
? (es macht es einfacher) - Ich Folgen Sie diese Tipps: codeproject.com/Tips/855577/..., Bevor ich auch die set-Liste<SizeColorQuantityViewModel> aber Es scheint nicht zu funktionieren
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Erzeugung Eingänge mit name-Attribute haben keine Beziehung zu Ihrem Modell, daher nicht gebunden werden kann, indem die
DefaultModelBinder
. Sie müssen zunächst die Generierung der Daten in der Steuerung (nicht in Ansicht), so dass Sie eine Bindung zu Ihrem Modell.Im folgenden wird davon ausgegangen, ändern Sie Ihre
SizeColorQuantities
EigenschaftList<SizeColorQuantityViewModel>
Haben Sie nun ein richtig aufgefüllt view-Modell, die verabschiedet werden, um die Ansicht, die Sie binden können, um mit stark typisierten
HtmlHelpers
im inneren geschachteltenfor
SchleifenHinweis: Immer verwenden, die stark typisierte
***For()
HtmlHelper
Methoden und nie versuchen, dievalue
(odername
) - Attribut bei Verwendung einesHtmlHelper
Methode.Ihre POST-Methode muss nun
Hinweis: Sie können auch benutzerdefinierte
EditorTemplate
's für Ihre Typen, wie in HTML-Tabelle zu ADO.NET DataTable, die auch erklärt, wie Ihrename
Attribute erzeugt werden muss, um die Bindung an Auflistungen. In Ihrem Fall, zum Beispiel IhreQuantity
Eingänge werden müssen (vergleichen Sie das, was Ihr derzeit generiert)