Mengapa saya menerima kesalahan:
Template hanya dapat digunakan dengan akses kolom, akses properti, indeks array dimensi tunggal, atau ekspresi pengindeks kustom parameter tunggal
pada kode ini:
@model IEnumerable<ArtSchoolProject.Models.Trainer>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_PageLayout.cshtml";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<ul class="trainers">
@foreach (var item in Model) {
<li>
<div>
<div class="left">
<a href="@Url.Action("Details", "Details", new { id = item.ID })">
<img src="~/Images/Trainer/@item.Picture" />
</a>
</div>
<div class="right">
@Html.ActionLink(item.Name,"Details",new {id=item.ID})
<br />
@Html.DisplayFor(modelItem=>@string. item.Description.ToString().Substring(0,100))
</div>
</div>
</li>
}
</ul>
pada baris:
@Html.DisplayFor(modelItem=>item.Description.ToString().Substring(0,100))
Memperbarui:
Masalah terpecahkan. Saya menambahkan ke kode saya:
@{
string parameterValue = item.Description.ToString().Substring(0, 100);
}
@Html.DisplayFor(modelItem=>parameterValue)
Kode baru saya:
@foreach (var item in Model) {
<li>
<div>
<div class="left">
<a href="@Url.Action("Details", "Details", new { id = item.ID })">
<img src="~/Images/Trainer/@item.Picture" />
</a>
</div>
<div class="right">
@Html.ActionLink(item.Name,"Details",new {id=item.ID})
<br />
@{
string parameterValue = item.Description.ToString().Substring(0, 100);
}
@Html.DisplayFor(modelItem=>parameterValue)
</div>
</div>
</li>
}
Ini hanya satu kemungkinan. Hanya karena penasaran, apakah ada solusi lain untuk mengatasi kesalahan tersebut?
c#
asp.net
string
asp.net-mvc-4
POIR
sumber
sumber
Jawaban:
Saya memiliki masalah yang sama dengan sesuatu seperti
Saya menyelesaikan ini hanya dengan melakukan
Ketika Anda mengetahui triknya, itu sederhana.
Perbedaannya adalah, dalam kasus pertama, saya meneruskan metode sebagai parameter sedangkan dalam kasus kedua, ini adalah ekspresi.
sumber
Template yang dirujuknya adalah helper Html
DisplayFor
.DisplayFor mengharapkan untuk diberikan ekspresi yang sesuai dengan aturan seperti yang ditentukan dalam pesan kesalahan.
Anda mencoba meneruskan rantai metode untuk dieksekusi dan itu tidak menyukainya.
Ini adalah contoh sempurna di mana pola MVVM (Model-View-ViewModel) berguna.
Anda bisa menyelesaikan
Trainer
kelas model Anda di kelas lain yang disebutTrainerViewModel
yang bisa bekerja seperti ini:Anda akan mengubah kelas model tampilan Anda untuk memuat semua properti yang diperlukan untuk menampilkan data itu dalam tampilan, oleh karena itu dinamai ViewModel.
Kemudian Anda akan memodifikasi pengontrol Anda untuk mengembalikan
TrainerViewModel
objek daripadaTrainer
objek dan mengubah deklarasi tipe model Anda di file tampilanTrainerViewModel
juga.sumber
Saya mengalami masalah serupa dengan pesan kesalahan yang sama menggunakan kode berikut:
Saya menemukan jawaban yang bagus di sini
Ternyata Anda bisa mendekorasi properti dalam model Anda dengan format tampilan kemudian menerapkan dataformatstring.
Pastikan untuk mengimpor lib berikut ke model Anda:
sumber
Isi lapisan layanan dengan model dan kemudian kirimkan ke tampilan. Misalnya: ViewItem = ModelItem.ToString (). Substring (0,100);
sumber