Saya memiliki pengontrol dengan metode tindakan sebagai berikut:
public class InventoryController : Controller
{
public ActionResult ViewStockNext(int firstItem)
{
// Do some stuff
}
}
Dan ketika saya menjalankannya saya mendapatkan kesalahan yang menyatakan:
Kamus parameter tidak berisi nilai yang valid dari jenis 'System.Int32' untuk parameter 'firstItem'. Untuk membuat parameter opsional, tipenya harus berupa tipe referensi atau tipe Nullable.
Saya membuatnya berfungsi pada satu titik dan saya memutuskan untuk mencoba fungsi tanpa parameter. Mengetahui bahwa pengontrol tidak gigih, saya memasukkan kembali parameter, sekarang ia menolak untuk mengenali parameter ketika saya memanggil metode tersebut.
Saya menggunakan sintaks url ini untuk memanggil tindakan:
http://localhost:2316/Inventory/ViewStockNext/11
Adakah ide mengapa saya mendapatkan kesalahan ini dan apa yang harus saya lakukan untuk memperbaikinya?
Saya sudah mencoba menambahkan metode lain yang mengambil integer ke kelas itu juga gagal dengan alasan yang sama. Saya sudah mencoba menambahkan satu yang mengambil string, dan string tersebut disetel ke null. Saya sudah mencoba menambahkan satu tanpa parameter dan itu berfungsi dengan baik, tetapi tentu saja itu tidak sesuai dengan kebutuhan saya.
sumber
new { firstItem = @"\d" }
. Dengan cara ini ia hanya akan menerima jika parameternya berupa angka apa pun. Anda dapat memodifikasi regex sesuka Anda, dan bahkan membatasi jumlah desimal, seperti ini:new { firstItem = @"\d{4}" }
- sekarang hanya dapat terdiri dari 4 angka. Sunting: contoh MapRoute yangAnda dapat mengubah firstItem menjadi id dan itu akan berhasil
Anda dapat mengubah perutean di global.asax (saya tidak merekomendasikannya)
dan, tidak percaya tidak ada yang menyebutkan ini, Anda dapat menghubungi:
Dalam @ Url. Tindakan akan menjadi:
tergantung pada jenis apa yang Anda lakukan, yang terakhir akan lebih cocok. Anda juga harus mempertimbangkan untuk tidak melakukan tindakan ViewStockNext dan sebagai gantinya tindakan ViewStock dengan index. (2 sen saya)
sumber
Untuk mengubah jawaban Jarret Meyer , Anda perlu mengubah nama parameter menjadi 'id' atau menambahkan rute seperti ini:
Alasannya adalah rute default hanya mencari tindakan tanpa parameter atau parameter bernama 'id'.
Edit: Heh, lupakan Jarret menambahkan contoh rute setelah posting.
sumber
atau lakukan dengan Atribut Rute:
sumber
routes.MapMvcAttributeRoutes();
dalam metode aplikasiRegisterRoutes(RouteCollection)
(biasanya di-scaffold ke App_Start \ RouteConfig.cs). Ini mungkin tidak ada di sana secara default.Headspring membuat pustaka bagus yang memungkinkan Anda menambahkan alias ke parameter Anda di atribut pada tindakan. Ini terlihat seperti ini:
Dengan ini, Anda tidak perlu mengubah perutean hanya untuk menangani nama parameter yang berbeda. Pustaka juga mendukung penerapannya beberapa kali sehingga Anda dapat memetakan beberapa ejaan parameter (berguna saat melakukan pemfaktoran ulang tanpa merusak antarmuka publik Anda).
Anda bisa mendapatkannya dari Nuget dan membaca artikel Jeffrey Palermo tentangnya di sini
sumber
public ActionResult ViewNextItem(int? id)
membuatid
integer menjadi tipe nullable, tidak perlu konversi string <-> int.sumber
Menggunakan fitur ASP.NET Core Tag Helper:
sumber
Ada cara lain untuk mencapai itu (dijelaskan secara lebih rinci dalam contoh Pager Stephen Walther
Pada dasarnya, Anda membuat tautan dalam tampilan:
Dalam routeData Anda dapat menentukan pasangan nama / nilai (misalnya, routeData ["page"] = 5), dan dalam fungsi Indeks pengontrol parameter yang sesuai menerima nilai. Itu adalah,
akan memiliki halaman yang diteruskan sebagai 5. Harus saya akui, sangat tidak biasa bahwa string ("halaman") secara otomatis menjadi variabel - tetapi begitulah cara kerja MVC dalam bahasa lain ...
sumber
Alasan perlakuan khusus dari "id" adalah karena ia ditambahkan ke pemetaan rute default. Untuk mengubahnya, buka Global.asax.cs, dan Anda akan menemukan baris berikut:
Ubah menjadi:
sumber
Atau, Anda dapat mencoba mengubah tipe parameter menjadi string, lalu mengonversi string menjadi integer dalam metode. Saya baru mengenal MVC, tetapi saya yakin Anda memerlukan objek nullable dalam daftar parameter Anda, bagaimana lagi pengontrol akan menunjukkan bahwa tidak ada parameter seperti itu yang diberikan? Begitu...
sumber