"টেমপ্লেটগুলি কেবল ক্ষেত্রের অ্যাক্সেস, সম্পত্তি অ্যাক্সেস, একক মাত্রা অ্যারে সূচক, বা একক-পরামিতি কাস্টম সূচক এক্সপ্রেশন ব্যবহার করে ব্যবহার করা যেতে পারে" ত্রুটি


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
অসাধারণ! আপনার সমাধানটি আমার পক্ষে কাজ করেছে এবং এটি এত সহজ। আপনি নিজের সমাধানটিকে আপডেট হিসাবে পরিবর্তে উত্তর হিসাবে রেখে, এবং এটি গ্রহণ করতে পারলে ভাল লাগবে। যেহেতু আমরা সাধারণত গৃহীত উত্তরগুলি লক্ষ্য করি।
27 এ ushাকা

উত্তর:


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
পারফেক্ট !!! আপনার উত্তর @ ড্যানিয়েলের জন্য থ্যাঙ্কস, আমি এই এস *** এর সাথে ঘন্টার পর ঘন্টা লড়াই করে
যাচ্ছিলাম

75

এটি যে টেম্পলেটটির উল্লেখ করছে তা হ'ল এইচটিএমএল সহায়ক DisplayFor

ডিসপ্লেফোর্ডটি এমন একটি অভিব্যক্তি দেওয়া প্রত্যাশা করে যা ত্রুটি বার্তায় বর্ণিত বিধি অনুসারে মেনে চলে।

আপনি কার্যকর করার জন্য একটি পদ্ধতি শৃঙ্খলে পাস করার চেষ্টা করছেন এবং এটি এটি পছন্দ করে না।

এটি যেখানে এমভিভিএম (মডেল-ভিউ-ভিউমোডেল) প্যাটার্নটি কাজে আসে তার একটি নিখুঁত উদাহরণ।

আপনি নিজের Trainerমডেল ক্লাসটিকে অন্য কোনও ক্লাসে গুটিয়ে TrainerViewModelরাখতে পারেন যা এইরকম কিছু কাজ করতে পারে:

class TrainerViewModel
{
    private Trainer _trainer;

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

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

সেই ভিউতে সেই ডেটা প্রদর্শনের জন্য প্রয়োজনীয় সমস্ত বৈশিষ্ট্য ধারণ করতে আপনি আপনার ভিউ মডেল বর্গটি সংশোধন করতে পারবেন, তাই ভিউমোডেল নাম রাখবেন।

তারপরে আপনি কোনও আইটেমের TrainerViewModelপরিবর্তে কোনও জিনিস ফেরত দিতে আপনার নিয়ামককে সংশোধন করতে পারেন Trainerএবং আপনার ভিউ ফাইলটিতে আপনার মডেল প্রকারের ঘোষণাকেও বদলে ফেলবেন TrainerViewModel


5
ত্রুটি বার্তার সঠিক ব্যাখ্যা দেওয়ার জন্য এবং অন্যদের দ্বারা বর্ণিত কৌশলটির চেয়ে আরও ভাল সমাধানের জন্য +1।
আর শেরুর্স

11

আমি নিম্নলিখিত কোড ব্যবহার করে একই ত্রুটি বার্তাটি নিয়ে একই ধরণের সমস্যায় পড়েছি:

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

আমি এখানে একটি ভাল উত্তর খুঁজে পেয়েছি

দেখা যাচ্ছে আপনি একটি মডেলটিতে সম্পত্তি প্রদর্শন করতে পারেন একটি প্রদর্শনী ফর্ম্যাট করে তারপরে একটি ডেটাফরম্যাটস্ট্রিং প্রয়োগ করুন।

নিম্নলিখিত মডেলটি আপনার মডেলটিতে আমদানি করতে ভুলবেন না:

using System.ComponentModel.DataAnnotations;

0

মডেলটি দিয়ে পরিষেবা স্তরটি পূরণ করুন এবং তারপরে এটি ভিউতে প্রেরণ করুন। উদাহরণস্বরূপ: ভিউ আইটেম = মডেল আইটেম.টোস্ট্রিং ()। সাবস্ট্রিং (0,100);

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.