Member 12700553 Ответов: 0

Как реализовать более одной редактируемой таблицы в одном представлении, учитывая, что две разные таблицы содержат данные двух разных моделей.


<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>

0 Ответов