Liên kết mô hình trong lõi mạng trên thuộc tính có tên newuserid không hoạt động

lập trình


Đây là một vấn đề rất lạ mà tôi đã phải vật lộn suốt 2 hoặc 3 ngày. Tôi đang sử dụng ứng dụng web Net Core 6.0 MVC.

Trong mô hình xem của tôi, tôi có một thuộc tính như thế này:

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

Mô hình được điền, được chuyển vào dạng xem và giá trị này được giữ nguyên trong đầu vào ẩn trong một biểu mẫu, tất cả đều rất chuẩn:

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

Khi biểu mẫu được ĐĂNG thì NewUserId trở lại bằng 0, không có mục nhập nào cho nó trong dữ liệu biểu mẫu được đăng và do đó nó không bị ràng buộc với mô hình đến.

Nếu tôi thay đổi tên thuộc tính thành UserId

public long UserId { get; set; }

Sau đó, nó liên kết và trả về chính xác.

Do đó, mô hình đang được nhận trong hành động:

public async Task<IActionResult> ConfirmCode(ConfirmCodeViewModel inputModel)

Tất cả các thuộc tính mô hình khác đều liên kết chính xác.

Điều này giải quyết được vấn đề nhưng tôi vẫn muốn tìm hiểu lý do tại sao nó không hoạt động với thuộc tính có tên là NewUserId.

Rất cám ơn cho bất kỳ đầu vào.

Tái bút Xin lỗi nếu định dạng mã hơi rắc rối, sự kém cỏi của tôi!

Những gì tôi đã thử:

Tôi đã thử thay đổi kiểu thành chuỗi

public string NewUserId { get; set; }

Nhưng điều đó cũng không hiệu quả.

Tôi đã kiểm tra bộ sưu tập request.Form gửi đến và không có mục nào có tên NewUserId được trả về.

Tôi đã kiểm tra chế độ xem để đảm bảo không có phần tử trùng lặp có cùng Id.

Tôi đã xác minh (sử dụng JS) rằng giá trị IS được đặt trong chế độ xem.

POST không bị chặn dưới bất kỳ hình thức nào (ví dụ: bởi JS).

Giải pháp 1

Theo tôi, điều rõ ràng nhất cần điều tra là tên của thuộc tính được mong đợi ở phía máy chủ của lệnh gọi POST. Xác minh xem nó có được gọi là NewUserId hay không. Tôi nghi ngờ rằng nó thực sự được gọi là UserId mà bạn đang chọn khi gửi giá trị qua. Nếu thuộc tính được gọi là UserId và bạn vẫn muốn sử dụng NewUserId cục bộ, bạn luôn có thể trang trí thuộc tính đó bằng tên mà bạn mong đợi ở phía bên kia (ví dụ này sử dụng NewtonSoft).

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

Giải pháp 2

Cảm ơn bạn đã phản hồi, đánh giá cao. Bạn đã phản ánh khá nhiều suy nghĩ của chính tôi, sự khác biệt về tên là nguyên nhân rất có thể do các trường ẩn nằm bên trong một biểu mẫu, v.v.

Thuộc tính là một phần của mô hình và được gọi là NewUserId ở mọi nơi (ví dụ: chính mô hình đó, chế độ xem, v.v.). Có một số thuộc tính bổ sung mà tất cả đều liên kết tốt, chỉ NewUserId không thành công.

Bằng cách thay đổi tên thành UserId thì tất cả đều hoạt động tốt. Việc thay đổi tên thuộc tính thành TestUserId cũng hoạt động tốt.

Tôi đã sử dụng ASP được một thời gian và chưa bao giờ gặp phải vấn đề nào như vậy, cứ như thể chính cái tên này đã bị cấm bằng cách nào đó!

コメント

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