Извините, если это было ранее, я не могу найти что-либо, что соответствует моей проблеме.MVC Отправить форму с частичным просмотром
У меня есть вид, который содержит частичный вид, а при представлении представления данные с частичного представления не отправляются на контроллер. Я понимаю, что если я использую шаблон редактора, это должно работать, но я не могу использовать это, поскольку мне нужны данные из моей основной модели внутри Partial.
Моя страница View (упрощенно):
@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>
}
Моя структура модели (упрощенный):
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; }
}
My Controller (я не буду размещать все это, как я могу сразу сказать, что мой ViewModel не содержит MappedFields):
[HttpPost]
public ActionResult Create(CreateXmlSchemaModel viewModel)
{
}
Мои _XmlMappedFields Частичный вид:
@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>
Мое намерение состоит в том, чтобы показать пользователю в парциальное, список всех заданных XmlFields и их значения, и дать им возможность выбрать BusinessObjectField из выпадающего списка для каждого XmlField. Затем я хочу, чтобы это было отправлено обратно контроллеру внутри объекта IEnumerable<XmlSchemaField> MappedFields
. Это возможно?
Как правило, можно отправлять формы, содержащие частичные виды. Трудно ответить на ваш вопрос, не видя 1. Ваш контроллер, 2. Какой класс 'XmlInputFieldModel'. Можете ли вы доказать это? – Nilzor
Также было бы полезно показать HTML, сгенерированный для частичного просмотра. Для вас самого, использование Fiddler для отладки данных POST также будет полезно – Nilzor
@Nilzor, я добавил недостающие классы для вас – Mark