Saya punya tindakan yang saya sebut dari jangkar dengan demikian, di Site/Controller/Action/ID
mana ID
ada int
.
Kemudian saya perlu mengalihkan ke Aksi yang sama dari Controller.
Apakah ada cara cerdas untuk melakukan ini? Saat ini saya menyembunyikan ID
di tempdata, tetapi ketika Anda menekan f5 untuk menyegarkan kembali halaman setelah kembali, tempdata hilang dan halaman macet.
c#
asp.net-mvc
controller
redirecttoaction
Eric Brown - Cal
sumber
sumber
Return RedirectToAction("Action", "Controller", New With {.id = 99})
Jawaban Kurt seharusnya benar, dari penelitian saya, tetapi ketika saya mencobanya saya harus melakukan ini agar benar-benar bekerja untuk saya:
Jika saya tidak menentukan controller dan tindakan di
RouteValueDictionary
dalamnya tidak berfungsi.Juga ketika dikodekan seperti ini, parameter pertama (Aksi) tampaknya diabaikan. Jadi, jika Anda hanya menentukan controller di Dict, dan mengharapkan parameter pertama untuk menentukan Action, itu tidak berfungsi baik.
Jika Anda datang nanti, coba jawaban Kurt terlebih dahulu, dan jika Anda masih memiliki masalah coba yang ini.
sumber
controller
parameternya opsional jika aksi redirect ada di controller yang sama dengan action yang Anda redirect.RedirectToAction
dengan parameter:sumber
new {id = id}
berfungsi dengan baik karena framework tahu variabel mana yang Anda maksud.Perlu dicatat bahwa Anda dapat melewati lebih dari 1 parameter. id akan digunakan untuk membuat bagian dari URL dan yang lainnya akan dilewati sebagai parameter setelah? di url dan akan UrlEnkode sebagai default.
misalnya
Jadi urlnya adalah:
Ini kemudian dapat dirujuk oleh controller Anda:
sumber
contoh
sumber
Contoh MVC 4 ...
Perhatikan bahwa Anda tidak selalu harus melewati parameter bernama ID
Dan,
Tentu saja Anda dapat menetapkan string ke bidang model alih-alih menggunakan ViewBag jika itu pilihan Anda.
sumber
Jika parameter Anda adalah objek yang kompleks, ini menyelesaikan masalah . Kuncinya adalah
RouteValueDictionary
konstruktor.Jika Anda memiliki koleksi, itu membuatnya sedikit lebih rumit, tetapi jawaban lain ini mencakup ini dengan sangat baik .
sumber
Bekerja untuk saya, tidak perlu dilakukan
new{id = id}
Saya mengarahkan ke dalam pengontrol yang sama jadi saya tidak perlu
"Controller"
tetapi saya tidak yakin pada logika spesifik di belakang ketika pengontrol diperlukan sebagai parameter.sumber
RedirectToAction("Action", "Controller", new { id = id});
hanya apa yang saya butuhkan di aplikasi Core 3.1 saya.Jika seseorang ingin Tampilkan pesan kesalahan untuk
[httppost]
kemudian ia dapat mencoba dengan melewati ID menggunakanuntuk Detail seperti ini
Semoga berhasil.
sumber
....
....
sumber
Saya punya masalah ini juga, dan cara yang cukup baik untuk melakukannya jika Anda berada di dalam pengontrol yang sama adalah dengan menggunakan parameter bernama:
sumber
Ini mungkin bertahun-tahun yang lalu tetapi bagaimanapun juga, ini juga tergantung pada rute peta Global.asax Anda karena Anda dapat menambah atau mengedit parameter agar sesuai dengan yang Anda inginkan.
misalnya.
Global.asax
maka parameter yang harus Anda lewati akan berubah menjadi:
sumber
Jika Anda perlu mengarahkan ulang ke tindakan di luar controller ini akan berfungsi.
sumber
Berikut ini berhasil dengan asp.net core 2.1. Ini mungkin berlaku di tempat lain. Kamus ControllerBase.ControllerContext.RouteData.Values dapat diakses secara langsung dan dapat ditulis dari dalam metode tindakan. Mungkin ini adalah tujuan akhir data dalam solusi lain. Ini juga menunjukkan dari mana data routing default berasal.
sumber