2011-02-09 13 views
27

मेरे पास रेज़र में आंशिक दृश्य है। जब मैं इसे चलाता हूं तो मुझे निम्न त्रुटि मिलती है - ऐसा लगता है जैसे रेजर सोचने में फंस गया है कि मैं हर जगह कोड लिख रहा हूं।"@" चरित्र के बाद अप्रत्याशित "foreach" कीवर्ड

"@" चरित्र के बाद अप्रत्याशित "foreach" कीवर्ड। एक बार कोड के अंदर, आप "@"

यहाँ के साथ "foreach" की तरह निर्माणों उपसर्ग की जरूरत नहीं है मेरे विचार है:

@model IEnumerable<SomeModel> 

<div> 
@using(Html.BeginForm("Update", "UserManagement", FormMethod.Post)) { 

    @Html.Hidden("UserId", ViewBag.UserId) 

@foreach(var link in Model) { 
    if(link.Linked) { 
     <input type="checkbox" name="userLinks" value="@link.Id" checked="checked" />@link.Description<br /> 
    } else { 
     <input type="checkbox" name="userLinks" value="@link.Id" />@link.Description<br />   
    } 
} 

} 
</div> 

उत्तर

47

अपने using ब्लॉक के अंदर, उस्तरा सी # स्रोत उम्मीद कर रही है, नहीं HTML ।

इसलिए, आपको @ के बिना foreach लिखना चाहिए।

एक HTML टैग के अंदर, रेजर मार्कअप की अपेक्षा करता है, तो आप @ का उपयोग करेंगे।

उदाहरण के लिए:

<div> 
    <!-- Markup goes here --> 
    @if (x) { 
     //Code goes here 
     if (y) { 
      //More code goes here 
      <div> 
       <!-- Markup goes here --> 
       @if (z) { } 
      </div> 
     } 
    } 
</div> 

आप केवल एक @ जरूरत है अगर आप जहां यह मार्कअप की उम्मीद कर रहा है कोड रखना चाहते हैं, या आप उत्पादन कहीं भी लिखने के लिए चाहते हैं।

गैर-टैग-जैसे मार्कअप को कोड की अपेक्षा करने के लिए, @: या <text> का उपयोग करें।

+2

+1 - मैं इस उस्तरा सीखने में मेरी # 1 बाधा होने के लिए लग रहा हूँ। मेरा मस्तिष्क तुरंत अंतर को पहचानने के लिए प्रतीत नहीं होता है। इसमें बेहतर हो रहा है, लेकिन मुझे अभी भी खुद को गलत चीज़ लिखना है और फिर इसे फिर से अपना रास्ता सोचना है। –

+0

हां; यह एक सूक्ष्म लेकिन महत्वपूर्ण भेद है। मैं अपने विच्छेदन रेजर श्रृंखला के हिस्से के रूप में इस बारे में एक ब्लॉग पोस्ट लिखने की योजना बना रहा हूं, लेकिन अभी भी 4 और हिस्सों को पहले आने की आवश्यकता है। – SLaks

+0

@ स्लक्स - याहू, कोड और मार्कअप के बीच आगे और आगे कूदना मेरे लिए गलत लगता है। यह एक तरह का दिमाग खराब है क्योंकि मैं कुछ वर्षों से "कोड या मार्कअप लेकिन दोनों नहीं" पर्यावरण में रहा हूं। निश्चित रूप से अस्थायी निराशा के लायक है। मैं बड़े पैमाने पर रेज़र कुलायड पी रहा हूँ। –

2

मैं सिर्फ एसएलएक्स को जोड़ना चाहता हूं कि मार्कअप वास्तव में केवल मार्कअप के भीतर कोड अनुभाग को परेशान नहीं करता है, और जैसे ही बंद टैग पहुंच जाता है, यह मार्कअप सेक्शन पर वापस लौट रहा है।

और इसी तरह मार्कअप के भीतर एक बार है, आपको कोड के बाद भी @ प्रतीक का उपयोग करने की आवश्यकता है।

कहते हैं, उदाहरण के लिए आप निम्नलिखित है:

@if(true) { 
     <span> 
      Markup section here, you need to include the @symbol 
      @if(1 = 1) 
      { 
      } 
      @if(2 = 2) @* The @ symbol here is required *@ 
      { 
      }     
     </span> 
     @: Code section back here, to output you need the "@:" symbol to display markup, although it is after the markup 
     if(false) @* Here the @ symbol isn't required *@ 
     { 
      some_statment; @* This will not be sent to the browser *@ 
      @display_someStament @* If we want to send it to the browser, 
        then we need the @ symbol even in the code section *@ 
     } 
} 
संबंधित मुद्दे