Soru Model öğesi, CookMeIndexViewModel türündendir, ancak IEnumerable türünde bir model öğesi gerektirir.


ASP.NET MVC'yi öğrenmeye çalışmak için müzik mağazası örneğini takip ediyorum. Bir yemek kitabı uygulaması oluşturuyorum.

Şu gibi görünen bir viewmodel oluşturdum:

namespace CookMe_MVC.ViewModels
{
    public class CookMeIndexViewModel
    {
        public int NumberOfReceipes { get; set; }
        public List<string> ReceipeName { get; set; }
    }
}

kontrol cihazım buna benziyor

public ActionResult Index()
    {
        var meals= new List<string> { "Dinner 1", "Dinner 2", "3rd not sure" };
       //create the view model
        var viewModel = new CookMeIndexViewModel
        {
            NumberOfReceipes = meals.Count(),
            ReceipeName = meals
        };
        return View(viewModel);
    }

Sonunda bakış açım böyle görünüyor

 @model IEnumerable<CookMe_MVC.ViewModels.CookMeIndexViewModel>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th></th>
        <th>
            Meals
        </th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
        </td>
        <td>
            @item.ReceipeName
        </td>
    </tr>
}

</table>

Bu hatayı alıyorum.

Sözlüğe aktarılan model öğesi türden CookMeIndexViewModelancak bu sözlükte model bir model öğesi gerektirir IEnumerable<CookMeIndexViewModel>.

Örneği takip ettim. Ne yapıyorum yanlış göremiyorum. Viewmodel'imi genel bir liste olarak mı döndürmeliyim?


32
2018-01-27 06:16


Menşei




Cevaplar:


Senin bakış açısıyla kullanıyorsun @model IEnumerable<CookMe_MVC.ViewModels.CookMeIndexViewModel> View tarafından beklenen modelin CookMeIndexViewModel türünün IEnumerable olduğunu gösterir.

Ancak denetleyicide, CookMeIndexViewModel türünde bir nesneyi model olarak geçiriyorsunuz return View(viewModel); dolayısıyla hata.

Görünüm görünümünü değiştirmek için @model CookMe_MVC.ViewModels.CookMeIndexViewModel

ya da aşağıdaki gibi kontrolördeki görünüme bir model olarak CookMeIndexViewModel IEnumerable geçmek:

public ActionResult Index()
{
        var meals= new List<string> { "Dinner 1", "Dinner 2", "3rd not sure" };
     //create the view model
        var viewModel = new CookMeIndexViewModel
        {
                NumberOfReceipes = meals.Count(),
                ReceipeName = meals
        };
        List<CookMeIndexViewModel> viewModelList = new List<CookMeIndexViewModel>();
        viewModelList.Add(viewModel);
        return View(viewModelList);
}

51
2018-01-27 06:25



teşekkürler sibernate. Üzgünüm, bu davada nasıl bir tane yaratacağım? - Diver Dan
Gönderiyi örnek kod ile güncellendi. Pls chk - Chandu
Benim durumumda, modele, modelin içinde bir değer atamayı unuttum. Aynı hata meydana geldi - Ama bu cevap beni doğru yöne yönlendirdi. Teşekkürler +1 - ppumkin
@Chandu: Ben de aynı hatayı yaşıyorum. Ama kısmi bir görünüm oluşturmaya çalışıyorum. Bu Sorunun bağlantısıdır. Değerleri doğru bir şekilde denetleyiciden görüntüye geçiriyorum. Ancak Kısmi görünümden hatayı atar. lütfen yardım edebilir misin? - Vini
@ViniVasundharan Lütfen orijinal cevabınız için Greg'in cevabını kontrol edin. Sorunu düzeltmenize yardımcı olmalı. - Chandu


_Layout.cshtml mizanpajı görünümünde ve "iç sayfa" görünümünde, Genel yönerge arasında bir çakışma olduğunda bu iletiyi aldım.

_Layout.cshtml yönergesi vardı ..

@model MyProject.Models.MyObject

İç sayfamda ...

@model IEnumerable<MyProject.Models.MyObject>

Bazı test / deneme kodları üzerinde çalışıyordum ve yeni denetleyici vb. Oluşturduğumda bu soruna rastladım. Sadece Model Nesnesi olarak yeniden adlandırdığım ve daha sonra derlenip problemin kaynağını bulduğumda ortaya çıktı.

Bu yardımcı olur umarım.

S.


3
2017-08-21 07:06



Benim için çok çalıştı .. Teşekkür ederim! - Gurusinghe


kendo ui Grid'de:

public class BookBean
    {
        [ScaffoldColumn(false)]
        public Int32 Id { set; get; }

        public String Title { set; get; }

        public String Author { set; get; }

        public String Publisher { set; get; }

        [UIHint("Integer")]
        public Int32 Price { set; get; }

        [UIHint("Integer")]
        public Int32 Instore { set; get; }

        [UIHint("Integer")]
        public Int32 GroupId { get; set; }
    }

Integer.ascx içinde Shared / EditorTemplate klasöründe şunu yapın:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<int?>" %>

<%: Html.Kendo().IntegerTextBoxFor(m => m)
      .HtmlAttributes(new { style = "width:100%" })
      .Min(int.MinValue)
      .Max(int.MaxValue)
%>

1
2017-08-26 14:41