न्यूयूजरिड नामक प्रॉपर्टी पर नेट कोर में मॉडल बाइंडिंग काम नहीं कर रही है


यह एक बहुत ही अजीब मुद्दा है जिस पर मैंने दो या तीन दिनों तक चर्चा की है। मैं नेट कोर 6.0 एमवीसी वेब ऐप का उपयोग कर रहा हूं।

मेरे विचार मॉडल में मेरे पास इस तरह की संपत्ति है:

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 नामक कोई आइटम वापस नहीं आया है।

मैंने यह सुनिश्चित करने के लिए दृश्य की जाँच की है कि समान आईडी वाला कोई डुप्लिकेट तत्व तो नहीं है।

मैंने सत्यापित किया है (जेएस का उपयोग करके) कि मान दृश्य के भीतर निर्धारित है।

POST को किसी भी तरह से इंटरसेप्ट नहीं किया जा रहा है (उदाहरण के लिए JS द्वारा)।

समाधान 1

मेरे विचार से, जांच करने के लिए सबसे स्पष्ट चीज़ उस संपत्ति का नाम है जो POST कॉल के सर्वर साइड पर अपेक्षित है। सत्यापित करें कि इसे NewUserId कहा जाता है या नहीं। मुझे संदेह है कि इसे वास्तव में यूजरआईडी कहा जाता है जिसे आप मूल्य भेजते समय उठा रहे हैं। यदि संपत्ति को UserId कहा जाता है, और आप अभी भी स्थानीय रूप से NewUserId का उपयोग करना चाहते हैं, तो आप हमेशा संपत्ति को उस नाम से सजा सकते हैं जिसकी आप दूसरी तरफ अपेक्षा करते हैं (यह उदाहरण न्यूटनसॉफ्ट का उपयोग करता है)।

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

コメント

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