Я борюсь с созданием правильного запроса AJAX для отправки данных формы и дополнительного массива на контроллер MVC.Модель POST плюс дополнительный массив для ASP.NET MVC-контроллера
[HttpPost, AjaxOnly]
public ActionResult GetAttributeViews(AddComponentsDialogModel model, List<int> attributeIDs)
Вот метод, который я пытаюсь получить.
// Post the model to GetAttributeViews:
$.ajax({
type: 'POST',
url: '../Component/GetAttributeViews',
data: $('form').serialize()
});
// Post the integer array to GetAttributeViews:
$.ajax({
type: 'POST',
url: '../Component/GetAttributeViews',
data: {
attributeIDs: [1, 2, 3]
},
traditional: true
});
Однако каждая попытка, которую я сделал для публикации обоих свойств, приводит к тому, что модель равна нулю. Я пробовал JSON.stringify, $ .param ({}, true), а также задавал параметры dataType и contentType запроса AJAX. Ничто из этого не помогает.
Каков правильный способ опубликовать оба эти значения на моем контроллере и перевести мою модель MVC в модель?
Вот мнение в вопросе:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CableSolve.Web.Models.Component.AddComponentsDialogModel>" %>
<% Html.BeginForm(); %>
<div class="editableContentWrapper twoColumnLayout">
<fieldset class="collapsible" id="<%= Model.AddComponentsLegendName.Replace(" ", "_") + "_Fieldset" %>">
<legend>
<%= Html.DisplayFor(model => model.AddComponentsLegendName)%>
</legend>
<div class="collapsibleDiv">
<div class="detailsRow required">
<%= Html.LabelFor(model => model.NameStart, Model.NameStartLabel)%>
<%= Html.EditorFor(model => model.NameStart) %>
</div>
<div class="detailsRow">
<%= Html.LabelFor(model => model.NameEnd, Model.NameEndLabel)%>
<%= Html.EditorFor(model => model.NameEnd)%>
</div>
<div class="detailsRow required">
<%= Html.LabelFor(model => model.RequiredSpaceLookup, Model.RequiredSpaceLookupLabel)%>
<%= Html.EditorFor(model => model.RequiredSpaceLookup)%>
</div>
<div class="detailsRow required">
<%= Html.LabelFor(model => model.RequiredTemplateLookup, Model.RequiredTemplateLookupLabel)%>
<%= Html.EditorFor(model => model.RequiredTemplateLookup)%>
</div>
<div class="detailsRow">
<%= Html.LabelFor(model => model.BarcodeStart, Model.BarcodeStartLabel)%>
<%= Html.EditorFor(model => model.BarcodeStart)%>
</div>
<div class="detailsRow">
<%= Html.LabelFor(model => model.BarcodeEnd, Model.BarcodeEndLabel)%>
<%= Html.EditorFor(model => model.BarcodeEnd)%>
</div>
</div>
</fieldset>
</div>
<div class="editableContentWrapper twoColumnLayout">
<fieldset class="collapsible" id="<%= Model.AttributesLegendName.Replace(" ", "_") + "_Fieldset" %>">
<legend>
<%= Html.DisplayFor(model => model.AttributesLegendName) %>
</legend>
<div class="collapsibleDiv attributeControlArea">
<%= Html.EditorFor(model => model.Attributes) %>
</div>
</fieldset>
</div>
<% Html.EndForm(); %>
<button type="button" class="addAttributes">Add Attributes</button>
<button type="button" class="clearAttributes">Clear Attributes</button>
<div id="AddAttributesLookup"></div>
Идея заключается в том, что атрибуты будут пустыми на первом прогоне, но клиент может выбрать несколько идентификаторов атрибутов, которые я хотел бы загрузить взгляды на то же время помня все от текущих данных. Итак, я хотел бы передать текущее состояние моей модели вместе со списком идентификаторов атрибутов обратно на мой контроллер, чтобы он мог создать новое представление, которое учитывает эти идентификаторы.
Не могли бы вы также опубликовать свой «Просмотр»? –
Ухх, конечно! Я отредактирую его в исходное сообщение. –
@AlexFilipovici Почему нужен код 'View'? Описанная здесь проблема связана только с «HTTP POST» и «Controller». – Shiva