Это MVC 5 проект. У меня проблема с получением второго представления для отображения из родительского представления. Мой родительский вид - это заказ на покупку, в котором есть позиции. Позиции должны быть добавлены путем запуска второго представления из родительского представления. Оба представления используют один и тот же контроллер, но у каждого свой метод действия. Я использую ниже JavaScript из представления PurchaseOrder для передачи данных в представление PurchaseOrderAddItem (дочернее представление):
$(document).ready(function () {
$('#PurchaseOrderLineItemAddId').click(function () {
var aPurchaseOrderViewModel = @Html.Raw(Json.Encode(Model));
var selectedVendorText = $('#ddlvendors option:selected').text();
var selectedVendorValue = $('#ddlvendors option:selected').val();
var LineItemReqJsonObj = {};
LineItemReqJsonObj.PurchaseOrderId = aPurchaseOrderViewModel.PurchaseOrderId;
LineItemReqJsonObj.VendorText = selectedVendorText;
LineItemReqJsonObj.VendorValue = selectedVendorValue;
var dataToPass = '{aLineItemReqJsonObj: ' + JSON.stringify(LineItemReqJsonObj) + '}';
$.ajax(
{
type: "POST",
//data: '{ aPurchaseOrderViewModel: ' + JSON.stringify(aPurchaseOrderViewModel) + ' }',
//data: aPurchaseOrderViewModelStr,
data: dataToPass,
url: '@Url.Action("PurchaseOrderAddItem")',
contentType: "application/json; charset=utf-8",
datatype: "json"
})
.done(function (aNewLineItemViewModel) {
AddNewLineItemReceived(aNewLineItemViewModel);
})
.fail(function (xhr) {
alert('error', xhr);
});
});
});
Ниже приведен метод действия в контроллере, который получает указанный выше запрос ajax:
[HttpPost]
public ActionResult PurchaseOrderAddItem(LineItemReqJsonObj aLineItemReqJsonObj)
{
LineItemViewModel aLineItemViewModel = new LineItemViewModel();
aLineItemViewModel.PurchaseOrderId = aLineItemReqJsonObj.PurchaseOrderId;
aLineItemViewModel.VendorId = Convert.ToInt32(aLineItemReqJsonObj.VendorValue);
return View(aLineItemViewModel);
}
Ниже приведен класс в контроллере, который получает данные, заполненные в него, когда они передаются из JavaScript:
public class LineItemJsonObj
{
public string PurchaseOrderId {get;set;}
public string VendorText { get; set; }
public string VendorValue { get; set; }
};
Следующая диаграмма иллюстрирует то, что я пытаюсь сделать :
![enter image description here](https://i.stack.imgur.com/tr7t0.png)
Как видно из диаграммы, я не могу получить представление PurchaseOrderAddItem для отображения. Как получить представление PurchaseOrderAddItem для отображения, получая данные параметров, после того, как представление PurchaseOrder вызвало действие PurchaseOrderAddItem из контроллера? Заранее спасибо.
- ОБНОВЛЕНИЕ 2/17/2020 1: 38PST-- Я, вероятно, ошибаюсь, полагая, что контроллер может запустить представление PurchaseOrderAddItem, которое при закрытии может каким-то образом вернуть полученные данные новой модели обратно в BuyOrder View с JavaScript, с которого это началось.
Я начинаю думать, что этот подход с использованием JavaScript $ Ajax для достижения контроллера не является правильным способом сделать это. Сейчас я проверяю, возможно ли мне просто загрузить другую веб-страницу из представления PurcahseOrder с данными параметров для создания нового представления PurchaseOrderAddItem. Задача здесь, однако, заключалась бы в том, чтобы, вероятно, упаковать все данные модели представления PurchaseOrder в go с помощью запроса Просмотр PurchaseOrderAddItem. Если при выходе из представления PurchaseOrderAddItem у меня будут полные данные модели представления PurchaseOrder, я смогу загрузить новое представление PurchaseOrder и передать ему все данные, которые были в первом экземпляре, поэтому он будет заполнен для добавления новых добавленных позиций. Я не уверен, что это правильный способ сделать это. Я еще не видел примеров того, как решается проблема с представлением представления приложения. Я был бы признателен, если бы кто-нибудь мог указать мне на какие-нибудь целые rnet статьи, которые, возможно, посвящены тому, как разрабатывать приложения такого типа MVC. Это очень легко сделать в настольных приложениях, но веб-разработка с MVC делает это совершенно другим и требует гораздо больше работы, чем что-либо в WPF или WinForms.