2012-01-05 10 views
11
public ActionResult SomeAction(int Id){ 
    //Id is set to 2 

    var model = //get some thing from db using Id(2); 
    //Now model.Id is set to 9; 

    return View(model); 
} 

----------View---------- 
@Html.HiddenFor(x => x.Id) 

द्वारा डाला जा रहा है जब मैं स्रोत देखें इस छिपी हुई फ़ील्ड 2 नहीं 9. मैं इसे कैसे मॉडल के बजाय मैप करने के लिए मिलता है पर सेट है यूआरएल रूटिंग जानकारी में मैपिंग का?HiddenFor (x => x.Id) UrlParameter बजाय ViewModel

पीएस मैं मानकों का नाम बदलना पसंद नहीं करूंगा क्योंकि तब तक मैं अपना अच्छा दिखने वाला यूआरएल खो देता हूं जब तक कि मैं रूटिंग जानकारी बदल नहीं लेता। मैंने ऐसा किया है और यह काम करता है, लेकिन जो मैं चाहता हूं वह नहीं।

+0

ऐसा लगता है कि आप दृश्य प्रस्तुत करने से पहले मॉडल मान को उचित रूप से सेट नहीं कर रहे हैं। जो आप देख रहे हैं उसका वर्णन करने का यही एकमात्र तरीका प्रतीत होता है। –

+0

क्या आपने अपने विचार में @model डालने का प्रयास किया है? –

+0

हां, मेरे पास दृश्य पर कई अन्य "छुपे हुए फोर" हैं जो सभी मॉडल के लिए सही तरीके से मानचित्रण कर रहे हैं। केवल यह गलत तरीके से मैपिंग कर रहा है। आईडी के x_id से क्रिया के पैरामीटर नाम को बदलने के बाद यह ठीक काम करता है। लेकिन मेरा यूआरएल "/ account/2" से "/ account? X_id = 2" में चला गया। –

उत्तर

24

एक Action ढांचे कहा जाता हो जाता है जब एक ModelStateCollection क्वेरी स्ट्रिंग मान, बाद डेटा, मार्ग मूल्यों आदि के आधार पर बनाता है और यह ModelStateCollectionView को दे दिया जाएगा। वास्तविक HTML से मूल्य प्राप्त करने का प्रयास करने से पहले सभी HTML इनपुट सहायक ModelStateCollectionपहले से मान प्राप्त करने का प्रयास करते हैं।

क्योंकि आपके इनपुट मॉडल int id है, लेकिन उत्पादन मॉडल कुछ नए मॉडल सहायकों ModelStateCollection से मूल्यों का उपयोग करेगा (क्वेरी स्ट्रिंग से) है, क्योंकि प्रॉपर्टी के नाम Id मैच कर रहे हैं।

यह काम आप मैन्युअल रूप से देखने के लिए नए मॉडल लौटने से पहले ModelStateCollection स्पष्ट करने के लिए है करने के लिए:

public ActionResult SomeAction(int Id){ 
    //Id is set to 2 

    ModelState.Clear(); 

    var model = //get some thing from db using Id(2); 
    //Now model.Id is set to 9; 

    return View(model); 
} 
+2

धन्यवाद, आप सज्जन और विद्वान हैं। –

+1

अच्छी कॉल, हालांकि इसमें किसी भी चीज के मामले में सावधानीपूर्वक समाशोधन मॉडलस्टेट होना चाहिए (इसमें भिन्न पैरामीटर नाम या मॉडल नाम पर विचार करने का एक कारण) –

+0

यह पूरी जानकारी में बताता है: http: //blogs.msdn।कॉम/बी/simonince/संग्रह/2010/05/05/एएसपी निवल MVC-स-एचटीएमएल-सहायकों-प्रदान-गलत-value.aspx –

4

आप नीचे दिए गए

<input id="Id" type="hidden" value="@Model.Id" /> 

इस कोशिश नहीं हो सकता कि वास्तव में आप क्या चाहते हैं सकता है, लेकिन अनिवार्य रूप से एक ही बात करता है।

+0

मेरा मानना ​​है कि यह भी काम करेगा, धन्यवाद। –

0

आप TextBoxFor का उपयोग करें और के रूप में

@Html.TextBoxFor(x => x.Id, new { @style="visibility:hidden; width:4px;"}) 

यह छिपा सीएसएस का उपयोग कर बना सकते हैं यह मेरे लिए काम किया

संबंधित मुद्दे