2012-06-13 23 views
6

मैं इसहम स्थानीय चर घोषित कैसे कर सकते हैं और इसका मूल्य कैसे बढ़ा सकते हैं?

@{ int i = 1; } 

की तरह एक चर घोषणा की है अब, foreach पाश अंदर मैं मैं का मूल्य हर बार पाश संसाधित किया जाता है प्रदान करना चाहते हैं;

@foreach (var line in Model.Cart.Lines) 
{ 
     <input type="hidden" name="[email protected]" value="@line.Product.ProductName" /> 
     <input type="hidden" name="[email protected]" value="@line.Product.Price" /> 
     <input type="hidden" name="[email protected]" value="@line.Quantity" /> 
     @i++; 
} 

लेकिन यह काम नहीं कर रहा है।

कोई समाधान?

@foreach (var item in Model.Cart.Lines.Select((x, i) => new { Line = x, Index = i })) 
{ 
    // Now you can access, for example, `item.Line` for the line, and 
    // `item.Index` for the index (i.e. `i`) 
    ... 
} 
+0

क्या काम नहीं कर रहा? – jrummell

उत्तर

2

आप सूचकांक के लिए उपयोग की जरूरत है, इसे और अधिक समझ में एक सामान्य for पाश उपयोग करने के लिए बनाता है समझाया कि क्या काम नहीं कर रहा है, लेकिन आपके कोड से ऐसा लगता है कि "i" चर का मान बढ़ता नहीं जा रहा है, इसके बजाय आप "0 ++;" का आउटपुट बनाते हैं।

इसका कारण यह है उस्तरा में @ प्रतीक के प्रयोजन के

    उत्पादन के लिए
  1. पहचानकर्ता है, और इसलिए यह पहचानकर्ता आउटपुट "मैं" और फिर "के ++ शेष पाठ के साथ जारी है; "।

    @{ i++; } 
    

    लेकिन यदि आप करना चाहते हैं:

प्राप्त करने के लिए आप जाहिरा तौर पर क्या करना चाहते हैं क्या (सिर्फ मैं का मूल्य बढ़ाने के लिए), आप, इस प्रकार एक कोड ब्लॉक में यह संलग्न करने के लिए है उत्पादन में यह incrementing से पहले मैं के मूल्य का है, तो आप इसे एक अभिव्यक्ति ब्लॉक में है, तो निम्न में के रूप में लपेट चाहिए:

@(i++) 
+0

प्यार यू समाधान और यह काम किया। लेकिन समस्या यह है कि, 1 से बढ़ने शुरू कैसे करें क्योंकि यह 0 –

+0

@DigitalAssets से मूल्यों में वृद्धि कर रहा है, जो कि आपके द्वारा उपयोग किए जाने वाले समाधान पर निर्भर करता है। LINQ- आधारित दृष्टिकोण के लिए, इसे 'इंडेक्स = i' के बजाय' इंडेक्स = i + 1' में बदलें। पूर्व एप्राच के लिए, या तो एक नया वैरिएबल इनलाइन घोषित करें, यानी 'int j = i + 1', या अपने 'for' कथन में दूसरा चर घोषित करें, '(int i = 0, j = 1; i

+0

मैंने यह किया, यह काम किया। अपने जवाब से प्यार करो। मुझे लगता है कि यह अधिक पेशेवर तरीका है। मेरे पास आपको धन्यवाद देने के लिए शब्द नहीं हैं। –

3

आप नहीं है: यदि आप एक LINQ अभिव्यक्ति इस्तेमाल कर सकते हैं वैकल्पिक रूप से

@for (int i = 0; i < Model.Cart.Lines.Count; i++) 
{ 
    var line = Model.Cart.Lines[i]; 
    ... 
} 

,:

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

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