Как реализовать более одной редактируемой таблицы в одном представлении, учитывая, что две разные таблицы содержат данные двух разных моделей.
<blockquote class="quote"><div class="op">Quote:</div>I have a requirement to display data from two different model classes in a single view. Infact there are collection of data for this two models, i.e. the view is displaying multiple row data for the model classes. To show this, I have a viewmodel class which contains two list of models, and in my action method I am passing this viewmodel to the view. For displaying the data there is no issue. However, now the requirement is to edit both the table rows, on which I am having problems. Can you let me know how can I do this?</blockquote>
Цитата:
вот мои примеры кода -
Модель 1 :
публичный класс VendorDetails
{
[Ключ]
public int LEADSOURCEID { get; set; }
публичная строка VENDORNAME { get; set; }
публичная строка LEADSOURCEDESCRIPTION { get; set; }
public string LEADSOURCESUBFOLDER { get; set; }
публичная строка LEADSOURCEIDENTIFYINGPHRASE { get; set; }
}
Модель 2:
открытый класс PhraseInformation
{
[Ключ,Столбец(Порядок =0)]
public int LEADSOURCEID { get; set; }
[Ключ, Столбец(Порядок = 1)]
публичная строка LEADPHRASE { get; set; }
[Ключ, Столбец(Порядок = 2)]
публичная строка LEADPHRASESEARCHAFTERPHRASE { get; set; }
публичная строка LEADFIELD { get; set; }
public int LEADFIELDLENGTH { get; set; }
public Boolean LEADSTOPATEOL { get; set; }
}
модель представления:
публичный класс DetailsAndPhraseInformationViewModel
{
публичный список<vendordetails> DetailInformationList { get; set; }
публичный список<phraseinformation> PhraseInformationList { get; set; }
}
Метод действия для отображения списков-
реквизиты общественная ActionResult(инт? leadSourceId)
{
DetailsAndPhraseInformationViewModel _viewModel = новый DetailsAndPhraseInformationViewModel();
VendorDetailsContext _VendorDetailsContext = новый VendorDetailsContext();
_модель представления.DetailInformationList = _VendorDetailsContext.Vendors.Где(VendorDetails => VendorDetails.LEADSOURCEID.ToString().Equals(leadSourceId.Метод toString())).Список();
_модель представления.PhraseInformationList = _VendorDetailsContext.Фразы.Где(p => p.LEADSOURCEID.ToString().Equals(leadSourceId.Метод toString())).Список();
смотреть возвращение(_viewModel);
}
подробное представление -
@model AimcoWebPortal.Области.VendorSetup.Модели.DetailsAndPhraseInformationViewModel
@{
Видовой мешок.Название = "Подробности";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<!DOCTYPE html>
Реквизиты источник поставщиками и ключевыми словами на @модель.DetailInformationList.Single().VENDORNAME
@формат HTML.Actionlink панели("редактирование", "редактирование", новый { leadSourceId = модель.DetailInformationList.Single().LEADSOURCEID }) |
@формат HTML.Actionlink панели("удалить", "удалить", новый { leadSourceId = модель.DetailInformationList.Single().LEADSOURCEID }) |
@формат HTML.Actionlink панели("назад к списку", "VendorDetails", новый { имяразработчика = "" })
V E N D O R - S O U R C E
@foreach (var details in Model.DetailInformationList)
{
}
ОПИСАНИЕ ИСТОЧНИКА
| ИСХОДНАЯ ПОДПАПКА
| ИСТОЧНИК ВЫЯВЛЕНИЯ ФРАЗА
|
@подробная информация.LEADSOURCEDESCRIPTION
| @подробная информация.LEADSOURCESUBFOLDER
| @подробная информация.LEADSOURCEIDENTIFYINGPHRASE
|
@{
если (модель.Фразеинформационный список.Count() == 0)
{
Информация о фразе для поставщика не найдена !!
}
еще
{
Л Е Д - П Ч Р А З Ы
@foreach (var фраза в модели.PhraseInformationList)
{
}
ВЕДУЩАЯ ФРАЗА
| ЛИДИРУЮЩАЯ ФРАЗА ПОИСК ПО ФРАЗЕ
|
@фраза.LEADPHRASE
| @фраза.LEADPHRASESEARCHAFTERPHRASE
|
}
}
При нажатии кнопки правка страница должна быть перенаправлена на аналогичное представление с редактируемыми полями.
Что я уже пробовал:<blockquote class="quote"><div class="op">Quote:</div>Below is the action on edit button click -
public ActionResult Edit(int? leadSourceId)
{
DetailsAndPhraseInformationViewModel _viewModel = new DetailsAndPhraseInformationViewModel();
VendorDetailsContext _VendorDetailsContext = new VendorDetailsContext();
_viewModel.DetailInformationList = _VendorDetailsContext.Vendors.Where(VendorDetails => VendorDetails.LEADSOURCEID.ToString().Equals(leadSourceId.ToString())).ToList();
_viewModel.PhraseInformationList = _VendorDetailsContext.Phrases.Where(p => p.LEADSOURCEID.ToString().Equals(leadSourceId.ToString())).ToList();
return View(_viewModel);
}
Edit View -
@model AimcoWebPortal.Areas.VendorSetup.Models.DetailsAndPhraseInformationViewModel
@{
ViewBag.Title = "Edit";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<!DOCTYPE html>
<html>
<head>
<link href="~/Content/Custom.css" rel="stylesheet" />
</head>
<body>
@using (Html.BeginForm("Submit", "VendorSetup", FormMethod.Post))
{
<div>
<h2>
Edit Vendor - @Model.DetailInformationList.Single().VENDORNAME
</h2>
<section>
@Html.ActionLink("Delete", "Delete", new { leadSourceId = Model.DetailInformationList.Single().LEADSOURCEID }) |
@Html.ActionLink("Back to List", "VendorDetails", new { vendorName = "" })
</section>
<hr />
@*<section class="button">
@Html.ActionLink("Submit Changes", "Submit", FormMethod.Post)
</section>*@
<input class="button" id="submit" type="submit" value="Submit Changes" />
<h2>
V E N D O R - S O U R C E
</h2>
<table class="table">
<tr>
<th>
SOURCE DESCRIPTION
</th>
<th>
SOURCE SUB FOLDER
</th>
<th>
SOURCE IDENTIFYING PHRASE
</th>
</tr>
@foreach (var details in Model.DetailInformationList)
{
<tr>
<td>
<div contenteditable class="editableTableDetails"> @details.LEADSOURCEDESCRIPTION </div>
</td>
<td>
<div contenteditable class="editableTableDetails"> @details.LEADSOURCESUBFOLDER</div>
</td>
<td>
<div contenteditable class="editableTableDetails"> @details.LEADSOURCEIDENTIFYINGPHRASE</div>
</td>
</tr>
}
</table>
<hr />
@{
if (Model.PhraseInformationList.Count() == 0)
{
<span style="font-size:x-large;color:teal;font-family:'Microsoft Sans Serif'"> No phrase information found for the vendor !! </span>
}
else
{
<h2>
L E A D - P H R A S E S
</h2>
<table class="table">
<tr>
<th>
LEAD PHRASE
</th>
<th>
LEAD PHRASE SEARCH AFTER PHRASE
</th>
</tr>
@foreach (var phrase in Model.PhraseInformationList)
{
<tr>
<td>
<div contenteditable class="editableTableDetails"> @phrase.LEADPHRASE </div>
</td>
<td>
<div contenteditable class="editableTableDetails"> @phrase.LEADPHRASESEARCHAFTERPHRASE </div>
</td>
</tr>
}
</table>
}
}
</div>
}
</body>
</html>
Action for Submit -
public ActionResult Submit(DetailsAndPhraseInformationViewModel model)
{
VendorDetailsContext _VendorDetailsContext = new VendorDetailsContext();
if (ModelState.IsValid)
{
.........
return Content("UPDATED");
}
else
{
return Content("UPDATE FAILED");
}
}
Now when the controller comes to this Submit method, I found the model is containing the two list DetailInformationList and PhraseInformationList as NULL.
I need help to solve this, I am not sure why these two lists are returning as NULL and what is the way to solve this. </blockquote>