Pengikatan model di inti bersih pada properti yang disebut newuserid tidak berfungsi

pemrograman


Ini adalah masalah yang sangat aneh yang telah saya perjuangkan selama 2 atau 3 hari. Saya menggunakan aplikasi web Net Core 6.0 MVC.

Dalam model tampilan saya, saya memiliki properti seperti ini:

public class ConfirmCodeViewModel
{
...
public long NewUserId { get; set; }
...
}

Model diisi, diteruskan ke tampilan dan nilai ini dipertahankan dalam masukan tersembunyi dalam formulir, semuanya sangat standar:

@model ConfirmCodeViewModel
...
<form asp-action="ConfirmCode" method="post">
...
<input type="hidden" asp-for="NewUserId" />
...
</form>

Ketika formulir di-POST maka NewUserId kembali sebagai nol, tidak ada entri untuk formulir tersebut dalam data formulir yang diposting sehingga tidak terikat ke model yang masuk.

Jika saya mengubah nama properti menjadi UserId

public long UserId { get; set; }

Kemudian ia mengikat dan kembali dengan benar.

Model yang diterima dalam tindakan sebagai berikut:

public async Task<IActionResult> ConfirmCode(ConfirmCodeViewModel inputModel)

Semua properti model lainnya terikat dengan benar.

Ini menyelesaikan masalah tetapi saya masih ingin mencari tahu mengapa ini tidak berfungsi dengan properti bernama NewUserId.

Terima kasih banyak atas masukan apa pun.

PS Mohon maaf jika format kodenya agak miring, ketidakmampuan saya!

Apa yang saya coba:

Saya telah mencoba mengubah tipe menjadi string

public string NewUserId { get; set; }

Tapi itu tidak berhasil juga.

Saya telah memeriksa koleksi Request.Form yang masuk dan tidak ada item bernama NewUserId yang dikembalikan.

Saya telah memeriksa tampilan untuk memastikan tidak ada elemen duplikat dengan Id yang sama.

Saya telah memverifikasi (menggunakan JS) bahwa nilainya telah ditetapkan dalam tampilan.

POST tidak dicegat dengan cara apa pun (misalnya oleh JS).

Solusi 1

Menurut saya, hal yang paling jelas untuk diselidiki adalah nama properti yang diharapkan di sisi server panggilan POST. Verifikasi apakah itu disebut NewUserId atau tidak. Saya menduga itu sebenarnya disebut UserId yang Anda ambil saat mengirimkan nilainya. Jika properti bernama UserId, dan Anda masih ingin menggunakan NewUserId secara lokal, Anda selalu dapat menghiasi properti tersebut dengan nama yang Anda harapkan di sisi lain (contoh ini menggunakan NewtonSoft).

C#
[JsonProperty("UserId")]
public long NewUserid { get; set; }

コメント

タイトルとURLをコピーしました