व्यूमोडेल को देखने के लिए पास करते समय मुझे त्रुटि मिलती है

ViewDataDictionary में पारित मॉडल आइटम 'System.Collections.Generic.List'1[TraficAlert.Models.TaBarHeader]' प्रकार का है, लेकिन इस ViewDataDictionary इंस्टेंस के लिए 'System.Collections.Generic.IEnumerable'1 प्रकार के मॉडल आइटम की आवश्यकता होती है। TraficAlert.Models.ViewModels.HeaderTelegramViewModel]'।

मैंने Index.cshtml में @model IEnumerable<TraficAlert.Models.ViewModels.HeaderTelegramaViewModel> का उपयोग करने का प्रयास किया है और यह काम करता है, लेकिन मुझे HeaderTelegramaViewModel से एक संपत्ति तक पहुंचने की आवश्यकता है।

Index.cshtml:

@model IEnumerable<TraficAlert.Models.ViewModels.HeaderTelegramaViewModel>

<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.TaBarHeader.Id)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.TaBarHeader.ParentId)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.TaBarHeader.TStamp)
            </th>
   (...)
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.TaBarHeader.Id)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.TaBarHeader.ParentId)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.TaBarHeader.TStamp)
                </td>
   (...)
                <td>
                    <a asp-action="Edit" asp-route-id="@item.TaBarHeader.Id">Edit</a> |
                    <a asp-action="Details" asp-route-id="@item.TaBarHeader.Id">Details</a> |
                    <a asp-action="Delete" asp-route-id="@item.TaBarHeader.Id">Delete</a>
                </td>
            </tr>
        }
    </tbody>
</table>

हैडरटेलीग्रामकंट्रोलर:

(...)
    public IActionResult Index()
    {
        var applicationDbContext = _unitofwork.BarHeader.GetAllBarH().ToList();
        return View(applicationDbContext);
    }

TaBarHeaderRepository:

public IEnumerable<TaBarHeader> GetAllBarH()
{
    return _db.TaBarHeaders
        .Include(t => t.CategoriaFk)
        .Include(t => t.CauzaFk)
        .Include(t => t.ClasaFk)
        .Include(t => t.LucrareFk)
        .Include(t => t.RegionalaFk)
        .Include(t => t.UserFk);
}

HeaderTelegramViewModel:

public TaBarHeader TaBarHeader { get; set; }
public IEnumerable<SelectListItem> Categoria { get; set; }
public IEnumerable<ViewOtf> ViewOTFCollection { get; set; }
(...)

मुझे उपर्युक्त त्रुटि क्यों मिलती है?

धन्यवाद।

0
littleO 9 जून 2021, 12:43

6 जवाब

सबसे बढ़िया उत्तर

Cshtml में नीचे दिए गए मॉडल का उपयोग करें।

@model TraficAlert.Models.ViewModels.HeaderTelegramaViewModel

और इंडेक्स() में HeaderTelegramViewModel का एक उदाहरण बनाएं:

var _HeaderTelegramaViewModel = new HeaderTelegramaViewModel();
_HeaderTelegramaViewModel.TaBarHeader = TaBarHeader;

और वर्ग HeaderTelegramViewModel में होना चाहिए:

public IEnumerable<TaBarHeader> TaBarHeader { get; set; } 
public IEnumerable<SelectListItem> Categoria { get; set; } 
public IEnumerable<ViewOtf> ViewOTFCollection { get; set; }
0
tartarismo 9 जून 2021, 13:42

उपयोग करें :: @model TraficAlert.Models.ViewModels.HeaderTelegramViewModel

के बजाय ::@model IEnumerable

Index.cshtml पृष्ठ के शीर्ष पर

0
V J 9 जून 2021, 13:14

अपने मॉडल का प्रकार देखें IEnumerable और इसे लागू करें:

   public IActionResult Index()
   {
       var applicationDbContext = _unitofwork.BarHeader.GetAllBarH();
       return View(applicationDbContext);
   }
0
Roman Zeleniy 9 जून 2021, 13:29

मुझे लगता है कि एक संभावित त्रुटि आपके टेबल हेड से आ सकती है एक इंडेक्स निर्दिष्ट करने का प्रयास करें जो आपके मॉडल की पुष्टि करता है वह एक आईनेमरेबल है। तो @Html.DisplayFor(modelItem => item.TaBarHeader.Id) कुछ इस तरह से @Html.DisplayFor(modelItem => item[0].TaBarHeader.Id)

0
Jeffery 9 जून 2021, 13:35

त्रुटि संदेश समस्या को स्पष्ट रूप से स्पष्ट करता है: आप दृश्य की अपेक्षा से भिन्न प्रकार से गुजर रहे हैं।

विशेष रूप से, आप दृश्य के लिए डेटा प्राप्त करने के लिए GetAllBarH() को कॉल करते हैं, और यह IEnumerable<TaBarHeader> लौटाता है। इसलिए पृष्ठ के लिए model घोषणा होनी चाहिए:

@model IEnumerable<TraficAlert.Models.TaBarHeader>

यदि आप वास्तव में HeaderTelegramaViewModel चाहते थे तो आपको IEnumerable<TaBarHeader> को किसी तरह परिवर्तित करना होगा। मुझे लगता है कि आप अपने नियंत्रक में वह कदम चूक गए हैं।

0
Corey 9 जून 2021, 13:43

मुझे उपर्युक्त त्रुटि क्यों मिलती है?

क्योंकि आपकी कार्रवाई में डेटा प्रकार लौटा दृश्य पर आवश्यक डेटा प्रकार के समान नहीं है

आप अपने HeaderTelegramController को इस प्रकार संशोधित कर सकते हैं:

public IActionResult Index()
{
   var applicationDbContext = _unitofwork.BarHeader.GetAllBarH().Select(m => new HeaderTelegramaViewModel { TaBarHeader = m }).ToList();
   return View(applicationDbContext);
}
0
Yihui Sun 10 जून 2021, 06:29