Entschuldigung, wenn dies zuvor beantwortet wurde, kann ich nichts finden, das zu meinem Problem passt.MVC-Formular mit Teilansicht senden
Ich habe eine Ansicht, die eine Teilansicht enthält, und beim Senden der Ansicht werden die Daten aus der Teilansicht nicht an die Steuerung gesendet. Ich verstehe, dass wenn ich eine Editor-Vorlage verwende, sollte dies funktionieren, aber ich kann dies nicht verwenden, da ich Daten von meinem Hauptmodell innerhalb der Partial benötigen.
Meine Ansicht erstellen (vereinfacht):
@model CreateXmlSchemaModel
@using (Html.BeginForm("Create", "XmlSchema", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<fieldset>
<div class="editor-label">
@Html.LabelFor(m => m.XmlSchema.Name)
</div>
<div class="editor-field">
@Html.EditorFor(m => m.XmlSchema.Name)
</div>
<div id="fieldmapping">
@Html.Partial("_XmlFieldMapping")
</div>
<div>
<input type="submit" value="Create" class="button" />
</div>
</fieldset>
}
Meine Modellstruktur (vereinfacht):
public abstract class XmlSchemaModelContainerBase
{
public IEnumerable<string> BusinessObjects { get; set; }
public IEnumerable<XmlInputFieldModel> XmlFields { get; set; }
public IEnumerable<string> BusinessObjectFields { get; set; }
}
public class XmlSchemaModelContainer : XmlSchemaModelContainerBase
{
public XmlSchemaModel XmlSchema { get; set; }
}
public class XmlSchemaModel
{
public Guid Id { get; set; }
public string Name { get; set; }
public string BusinessObject { get; set; }
public IEnumerable<XmlSchemaField> MappedFields { get; set; }
}
public class XmlSchemaField
{
public string XmlElement { get; set; }
public string BusinessObjectField { get; set; }
}
public class XmlInputFieldModel
{
public string XmlElement { get; set; }
public string XmlValue { get; set; }
}
public class CreateXmlSchemaModel : XmlSchemaModelContainer
{
[Required(ErrorMessage = "File upload required")]
public HttpPostedFileBase Xml { get; set; }
}
Mein Controller (Ich werde es nicht post alle, wie ich sofort sagen kann, dass mein Ansichtsmodell nicht enthält die MappedFields):
[HttpPost]
public ActionResult Create(CreateXmlSchemaModel viewModel)
{
}
Mein _XmlMappedFields Teilansicht:
@model CherwellXmlConnector.Models.XmlSchemaModelContainer
@{
Model.XmlSchema.MappedFields = Model.XmlSchema.MappedFields.OrderBy(i => i.XmlElement);
}
<div>
<div>
@for(int i = 0; i < @Model.XmlFields.Count(); i ++)
{
List<CherwellXmlConnector.Models.XmlSchemaField> fields = Model.XmlSchema.MappedFields.ToList();
string itemValue = Model.XmlFields.FirstOrDefault(x => x.XmlElement == fields[i].XmlElement).XmlValue;
<div style="width: 300px; display: inline-block;">
@Html.DisplayFor(x => fields[i].XmlElement)
</div>
<div style="width: 300px; display: inline-block;">
@itemValue
</div>
<div class="busoblist" style="display: inline-block;">
@Html.DropDownListFor(x => fields[i].BusinessObjectField, new SelectList(Model.BusinessObjectFields))
</div>
<hr />
}
</div>
</div>
Meine Absicht ist es, den Anwender in die teilweise eine Liste aller gegebenen XmlFields und deren Werte angezeigt werden, und lassen Sie sie für jeden XMLField eine BusinessObjectField aus einem Dropdown auswählen. Ich möchte dann diese zurück an den Controller innerhalb der IEnumerable<XmlSchemaField> MappedFields
Objekt gesendet. Ist das möglich?
Im Allgemeinen ist es möglich, Formulare mit Teilansichten einzureichen. Schwierig, Ihre Frage zu beantworten, ohne zu sehen 1. Ihr Controller, 2. Welche Art von Klasse 'XmlInputFieldModel'. Können Sie das provozieren? – Nilzor
Auch das Anzeigen des für die Teilansicht generierten HTML wäre hilfreich. Für dich selbst wäre es auch hilfreich, Fiddler zu verwenden, um die POST-Daten zu debuggen. – Nilzor
@Nilzor, ich habe die fehlenden Klassen für dich hinzugefügt – Mark