ربط النموذج في net core على خاصية تسمى newuserid لا يعمل

برمجة


هذه مشكلة غريبة للغاية وقد ناقشتها لمدة يومين أو ثلاثة أيام. أنا أستخدم تطبيق الويب Net Core 6.0 MVC.

في نموذج العرض الخاص بي لدي خاصية مثل هذا:

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

تتم تعبئة النموذج وتمريره إلى طريقة عرض ويتم الاحتفاظ بهذه القيمة في مدخلات مخفية داخل النموذج، وكلها أشياء قياسية جدًا:

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

عندما يتم نشر النموذج، يعود NewUserId إلى الصفر، ولا يوجد إدخال له في بيانات النموذج المنشورة وبالتالي فهو غير مرتبط بالنموذج الوارد.

إذا قمت بتغيير اسم الخاصية إلى UserId

public long UserId { get; set; }

ثم يربط ويعود بشكل صحيح.

يتم تلقي النموذج في الإجراء على النحو التالي:

public async Task<IActionResult> ConfirmCode(ConfirmCodeViewModel inputModel)

يتم ربط جميع النماذج الأخرى المملوكة بشكل صحيح.

يؤدي هذا إلى حل المشكلة ولكني ما زلت أرغب في معرفة سبب عدم عملها مع الخاصية المسماة NewUserId.

شكرا جزيلا على أي مساهمة.

ملاحظة: أعتذر إذا كان تنسيق التعليمات البرمجية متزعزعًا بعض الشيء، فهذا يعني عدم كفاءتي!

ما حاولت:

لقد حاولت تغيير النوع إلى سلسلة

public string NewUserId { get; set; }

لكن ذلك لم ينجح أيضاً.

لقد قمت بفحص مجموعة Request.Form الواردة ولم يتم إرجاع أي عنصر يسمى NewUserId.

لقد قمت بفحص العرض للتأكد من عدم وجود عنصر مكرر بنفس المعرف.

لقد تحققت (باستخدام JS) من تعيين القيمة داخل العرض.

لا يتم اعتراض POST بأي شكل من الأشكال (على سبيل المثال عن طريق JS).

الحل 1

في رأيي، الشيء الأكثر وضوحًا الذي يجب التحقيق فيه هو اسم الخاصية المتوقعة على جانب الخادم لمكالمة POST. تحقق مما إذا كان يسمى NewUserId أم لا. أظن أنه يُسمى بالفعل UserId والذي تلتقطه عند إرسال القيمة. إذا كانت الخاصية تسمى UserId، وما زلت تريد استخدام NewUserId محليًا، فيمكنك دائمًا تزيين الخاصية بالاسم الذي تتوقعه على الجانب الآخر (يستخدم هذا المثال NewtonSoft).

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

コメント

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