2016-10-21 15 views
5

से बाध्य नहीं होता है, मैं तीसरे पक्ष के स्थिर पृष्ठ (एडोब म्यूज़िक द्वारा जेनरेट) से पोस्ट अनुरोध पकड़ता हूं और इसे एमवीसी एक्शन के साथ संभालता हूं।Asp.net कोर मॉडल फॉर्म

<form method="post" enctype="multipart/form-data"> 
    <input type="text" name="Name"> 
    ... 
</form> 

खाली प्रपत्र कार्रवाई के लिए रूटिंग:

app.UseMvc(routes => routes.MapRoute(
    name: "default", 
    template: "{controller=Home}/{action=Index}")); 

लेकिन कार्रवाई अनुसार में मैं हर संपत्ति के साथ मॉडल है खाली है

कार्रवाई:

[HttpPost] 
public void Index(EmailModel email) 
{ 
    Debug.WriteLine("Sending email"); 
} 

मॉडल:

,210

Request.Form रूप से सभी मूल्यों है, लेकिन मॉडल रिक्त है

[0] {[Name, Example]} 
[1] {[Email, [email protected]]} 
[2] {[Company, Hello]} 
[3] {[Phone, Hello]} 
[4] {[Additional, Hello]} 
+0

आप 'enctype = "multipart/form-data" 'का उपयोग क्यों करते हैं? आपको इसे निर्दिष्ट करने की आवश्यकता नहीं है क्योंकि आपके मॉडल में कोई फ़ाइल अपलोड नहीं है। शायद आपकी समस्या इस कारण से होती है। निकालें और कोशिश करें। –

+0

@ademcaglin ने 'enctype' विशेषता हटा दी। मदद नहीं करता है। अभी भी 'Request.Form' में सभी मान हैं, लेकिन' मॉडल' खाली है। –

+0

क्या आपने फ़ॉर्म भेजने के लिए किसी भी जावास्क्रिप्ट कोड का उपयोग किया था? –

उत्तर

13

सावधानी बरतें कि एक्शन पैरामीटर को एक ऐसा नाम न दें जो मॉडल संपत्ति के समान है या बाइंडर पैरामीटर से जुड़ने और विफल होने का प्रयास करेगा।

public async Task<IActionResult> Index(EmailModel email){ ... } 

public class EmailModel{ public string Email { get; set; } } 

क्रिया पैरामीटर 'ईमेल' को एक अलग नाम पर बदलें और यह अपेक्षित रूप से बाध्य होगा।

public async Task<IActionResult> Index(EmailModel uniqueName){ ... } 
+3

धन्यवाद! मेरे पास मेरे मॉडल मॉडल में "मॉडल" नाम की एक संपत्ति थी जो बाध्यकारी तोड़ दी। –

+2

इसने मुझे सिरदर्द के कई और घंटे बचाए – mohas

+0

एएसपी.नेट कोर के मॉडल बाध्यकारी कोड की तरह लगता है कि हम इस मामले में अपवाद फेंक कर हमें हड्डी फेंक सकते हैं! –

0

बदलें शून्य करने के लिए ActionResult

[HttpPost] 
public ActionResult Index(EmailModel email) 

और अपने दृश्य और कार्रवाई से AntiForgeryToken की पुष्टि करना न भूलें।

// to your form in view 
@Html.AntiForgeryToken() 
// ------------ 

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Index(EmailModel email) 
+0

मदद नहीं करता है। इसके अलावा मैं 'एंटीफोर्गेरी टोकन' का उपयोग नहीं कर सकता क्योंकि यह पृष्ठ मेरा नहीं है और तीसरे पक्ष के उपकरण (एडोब म्यूज़न) –

+0

द्वारा उत्पन्न किया गया है, मुझे लगता है कि आप इसे ऐसे टूल के साथ मॉडल के रूप में नहीं प्राप्त कर सकते जो क्रिया दृश्य में नहीं है। आप फॉर्म प्राप्त करने के तरीके के साथ मूल्य प्राप्त करने का प्रयास कर सकते हैं, न कि मॉडल के रूप में। पैरामीटर नाम से। सूचकांक (स्ट्रिंग नाम, स्ट्रिंग ईमेल, स्ट्रिंग कंपनी, स्ट्रिंग फोन)। और इस मान को प्रक्रिया में अपने ऑब्जेक्ट मॉडल में कनवर्ट करें। – agenc

+0

मुझे यह भी लगता है कि एमवीसी मॉडल या कुछ नहीं ढूंढ सकता है, और हां, मैं केवल क्रिया पैरामीटर का एक गुच्छा उपयोग कर सकता हूं, या इसे 'Request.Form' के साथ कार्रवाई में भर सकता हूं, या' IModelBinder 'के साथ ऐसा करने का प्रयास कर सकता हूं, मैं बस चाहता हूं यह समझने के लिए कि मैं डिफ़ॉल्ट मॉडल बाध्यकारी का उपयोग क्यों नहीं कर सकता। शायद मैं कुछ सम्मेलनों को याद किया? –

0

मैं एक ही समस्या इस डॉक्स मुझे मॉडल बाइंडिंग https://docs.asp.net/en/latest/mvc/models/model-binding.html

मुझे यकीन है कि प्रॉपर्टी के नाम पर प्रपत्र फ़ील्ड नाम और मैं में सटीक मिलान है बनाकर मेरी समस्या हल समझने में मदद करता आ रही हैं बिल्कुल बाध्यकारी स्रोत निर्दिष्ट करने के लिए [FromForm] विशेषता भी जोड़ें।

1

मुझे यकीन नहीं है कि यह एक ही मामला है, लेकिन मुझे एक ही समस्या थी और वास्तव में मेरे लिए काम करने के लिए कुछ भी नहीं दिख रहा था।
मेरे मामले में समस्या जब मैं संपत्ति सब कुछ फिर से ठीक काम कर रहा था, यहां तक ​​कि FromForm विशेषता के बिना ModelName नाम दिया है कि मैं अपने दृश्य मॉडल वर्ग

public string Model { get; set; } 

में एक संपत्ति मॉडल कहा जाता था।

ऐसा लगता है कि कुछ विशेष संपत्ति नाम एएसपीनेट एमवीसी मॉडल बाध्यकारी के लिए एक समस्या हो सकती है।

तो, मेरी सलाह है कि आप अपने मॉडल गुणों की जांच करें और शायद यह जांचने के लिए कि उन्हें समस्या है या नहीं, उन्हें एक-एक करके नाम बदलने का प्रयास करें।

उम्मीद है कि इससे मदद मिलती है।