"टेम्पलेट का उपयोग केवल फ़ील्ड एक्सेस, प्रॉपर्टी एक्सेस, सिंगल-डायमेंशन एरे इंडेक्स या सिंगल-पैरामीटर कस्टम इंडेक्सर एक्सप्रेशंस" एरर के साथ किया जा सकता है।


107

मुझे त्रुटि क्यों मिल रही है:

टेम्पलेट का उपयोग केवल फ़ील्ड एक्सेस, प्रॉपर्टी एक्सेस, सिंगल-डायमेंशन एरे इंडेक्स या सिंगल-पैरामीटर कस्टम इंडेक्सर एक्सप्रेशंस के साथ किया जा सकता है

इस कोड पर:

@model IEnumerable<ArtSchoolProject.Models.Trainer>

@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_PageLayout.cshtml";
}

<h2>Index</h2>

<p>
@Html.ActionLink("Create New", "Create")
</p>
<ul class="trainers">


@foreach (var item in Model) {
<li>
  <div>
      <div class="left">
          <a href="@Url.Action("Details", "Details", new { id = item.ID })">
              <img src="~/Images/Trainer/@item.Picture" />
          </a>
      </div>
      <div class="right">
          @Html.ActionLink(item.Name,"Details",new {id=item.ID})
          <br />
          @Html.DisplayFor(modelItem=>@string. item.Description.ToString().Substring(0,100))
      </div>
  </div>
  </li>
  }

  </ul>

रेखा पर:

@Html.DisplayFor(modelItem=>item.Description.ToString().Substring(0,100))

अपडेट करें:

समस्या सुलझ गयी। मैंने अपने कोड में जोड़ा:

  @{
string parameterValue = item.Description.ToString().Substring(0, 100); 
          }
          @Html.DisplayFor(modelItem=>parameterValue)

मेरा नया कोड:

@foreach (var item in Model) {
<li>
  <div>
      <div class="left">
          <a href="@Url.Action("Details", "Details", new { id = item.ID })">
              <img src="~/Images/Trainer/@item.Picture" />
          </a>
      </div>
      <div class="right">
          @Html.ActionLink(item.Name,"Details",new {id=item.ID})
          <br />
          @{
string parameterValue = item.Description.ToString().Substring(0, 100); 
          }
          @Html.DisplayFor(modelItem=>parameterValue)
      </div>
  </div>
 </li>
}

यह केवल एक संभावना है। बस जिज्ञासा के लिए त्रुटि को हल करने के लिए एक और उपाय है?


3
अति उत्कृष्ट! आपके समाधान ने मेरे लिए काम किया, और यह इतना सरल है। यह अच्छा होगा यदि आप अपने समाधान को अपडेट के बजाय उत्तर के रूप में रख सकते हैं, और इसे स्वीकार कर सकते हैं। चूंकि हम आमतौर पर स्वीकृत उत्तरों को देखते हैं।
दश

जवाबों:


101

मुझे भी कुछ इसी तरह की समस्या थी

@foreach (var item in Model)
{
    @Html.DisplayFor(m => !item.IsIdle, "BoolIcon")
}

मैंने इसे सिर्फ करके हल किया

@foreach (var item in Model)
{
    var active = !item.IsIdle;
    @Html.DisplayFor(m => active , "BoolIcon")
}

जब आप चाल जानते हैं, तो यह सरल है।

अंतर यह है कि, पहले मामले में, मैंने एक विधि को पैरामीटर के रूप में पारित किया, जबकि दूसरे मामले में, यह एक अभिव्यक्ति है।


1
उत्तम!!! आपके उत्तर के लिए Thanx @ डैनियल, मैं इस s *** के साथ घंटों तक लड़ रहा था
JSEvgeny

75

यह जिस टेम्पलेट का जिक्र कर रहा है वह है Html हेल्पर DisplayFor

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

आप निष्पादित होने के लिए एक विधि श्रृंखला में पारित करने की कोशिश कर रहे हैं और यह इसे पसंद नहीं करता है।

यह एक आदर्श उदाहरण है जहां MVVM (मॉडल-व्यू-व्यूमॉडल) पैटर्न काम आता है।

आप अपने Trainerमॉडल वर्ग को किसी अन्य वर्ग में लपेट TrainerViewModelसकते हैं, जो कुछ इस तरह से काम कर सकता है:

class TrainerViewModel
{
    private Trainer _trainer;

    public string ShortDescription
    {
        get
        {
            return _trainer.Description.ToString().Substring(0, 100);
        }
    }

    public TrainerViewModel(Trainer trainer)
    {
        _trainer = trainer;
    }
}

आप उस दृश्य में डेटा प्रदर्शित करने के लिए आवश्यक सभी गुणों को शामिल करने के लिए अपने दृश्य मॉडल वर्ग को संशोधित करेंगे, इसलिए ViewModel नाम।

तब आप किसी TrainerViewModelवस्तु के बजाय किसी वस्तु को वापस करने के लिए अपने नियंत्रक को संशोधित करेंगे Trainerऔर अपने मॉडल प्रकार की घोषणा को अपनी दृश्य फ़ाइल में TrainerViewModelभी बदल सकते हैं।


5
+1 त्रुटि संदेश की उचित व्याख्या देने के लिए और दूसरों द्वारा बताई गई चाल से बेहतर समाधान के लिए।
आर। श्रेयर्स

11

मैं निम्नलिखित कोड का उपयोग करके एक ही त्रुटि संदेश के साथ समान समस्या में भाग गया:

@Html.DisplayFor(model => model.EndDate.Value.ToShortDateString())

मुझे यहां एक अच्छा जवाब मिला

यह पता चलता है कि आप अपने मॉडल में डिस्प्लेफॉर्म के साथ संपत्ति को सजा सकते हैं और फिर डेटाफॉर्मटस्ट्रिंग लागू कर सकते हैं।

अपने मॉडल में निम्नलिखित काम आयात करना सुनिश्चित करें:

using System.ComponentModel.DataAnnotations;

0

मॉडल के साथ सेवा परत भरें और फिर इसे दृश्य पर भेजें। उदाहरण के लिए: ViewItem = ModelItem.ToString ()। पदार्थ (0,100);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.