'আইএনএমিউরেবল <সিলেক্টলিস্ট আইটেম>' টাইপের কোনও ভিউডেটা আইটেম নেই যা 'xxx' কী রয়েছে


87

স্ট্যাক ওভারফ্লোতে এই সম্পর্কে বেশ কয়েকটি পোস্ট রয়েছে তবে উত্তর নেই যা আমার বর্তমান পরিস্থিতিতে সমস্যার সমাধান করছে বলে মনে হচ্ছে।

আমার এতে একটি টেবিল সহ একটি পৃষ্ঠা রয়েছে, প্রতিটি সারিতে কয়েকটি পাঠ্য ক্ষেত্র এবং একটি ড্রপডাউন রয়েছে। সমস্ত ড্রপডাউনগুলিতে একই নির্বাচন তালিকাভুক্ত ডেটা ব্যবহার করা দরকার যাতে আমি এটি নীচে সেট আপ করেছি:

নিয়ামক

ViewData["Submarkets"] = new SelectList(submarketRep.AllOrdered(), "id", "name");

দেখুন

<%= Html.DropDownList("submarket_0", (SelectList)ViewData["Submarkets"], "(none)") %>

আমি অনেক জায়গায় ঠিক এই সেটআপটি ব্যবহার করেছি, তবে এই বিশেষ দৃষ্টিতে কিছু কারণে আমি ত্রুটি পেয়েছি:

'আইনিউমারেবল' টাইপের কোনও ভিউডেটা আইটেম নেই যাতে 'সাবমার্কেট_0' কী রয়েছে।


4
আপনি কি এই চেষ্টা করেছেন? <%= Html.DropDownList("submarket_0", ((SelectList)ViewData["Submarkets"]).Items, "(none)") %>ড্রপডাউনলিস্ট নেয় IEnumerable<SelectListItem>
LukLed

@ লুকলেড - সত্যই আমি শেষ পর্যন্ত ত্রুটির উত্স খুঁজে পেয়েছিলাম :) পাশাপাশি কিছু অন্যান্য পোস্টের তথ্য! ধন্যবাদ
জিম্বো

<%= Html.DropDownList("submarket_0", ViewData["Submarkets"] as IEnumerable<SelectListItem>, "(none)") %>
আরভিস

আজ এটির মুখোমুখি হয়েছিল এবং আমার ড্রপডাউনলিস্ট সহায়কটিতে দ্বিতীয় যুক্তিটি শূন্য ছিল, @ জোনাথনসওয়েল থেকে নীচের অনুসন্ধানে।
কেন পামার 16

উত্তর:


79

ঠিক আছে, সুতরাং এই সমস্যাটি সম্পর্কে উত্তরটি অন্য কয়েকটি পোস্ট থেকে নেওয়া হয়েছিল এবং এটি হ'ল:

আপনার যদি আপনার "সাবমার্কেট টি" এর একই নামের ViewDataএকটি থাকে তবে এইচটিএমএল সহায়ক আপনাকে যদি সেই ক্ষেত্রে দ্বিতীয় উত্সটি উত্স সিলেক্টলিস্ট উল্লেখ না করে তবে স্বয়ংক্রিয়ভাবে আপনাকে সেই তথ্য দিয়ে পপুলেটে যাবে।SelectListDropDownListDropDownList

আমার ত্রুটির সাথে যা ঘটেছিল তা হ'ল:

যেহেতু ড্রপ ডাউন তালিকাগুলি থাকা সারণীটি একটি আংশিক দৃশ্যে ViewDataছিল এবং এটি পরিবর্তিত হয়ে গিয়েছিল এবং SelectListআমি যে রেফারেন্সটি দিয়েছিলে তাতে আর উপস্থিত ছিল না, HtmlHelper( ভিউ নিক্ষেপের পরিবর্তে) ভিউডাটাতে (জিআরআরআরআর "সাবমার্কেটে" নামক সিলেক্টলিস্টটি সন্ধান করার চেষ্টা করা হয়েছিল! !!) যা এটি এখনও খুঁজে পাওয়া যায়নি এবং তারপরে একটি ত্রুটি ছুড়ে দিয়েছে :)

আমি ভুল হলে আমাকে সংশোধন করুন


105
আমি এই ত্রুটিটি পেয়েছি কারণ ড্রপ ডাউন তালিকার জন্য আমার সিলেক্টলিস্ট আইটেমগুলির সংগ্রহটি শূন্য ছিল, যা আপনার মনে হওয়ার পরে একই সমস্যা।
জোনাথন সিওয়েল

6
এই সমস্যার সাথে মোকাবিলা করা অন্যদের জন্য, অস্থায়ীভাবে আপনার ড্রপ ডাউন তালিকাটি নাল চেকের মধ্যে মোড়ক করুন, যেমন @if (ভিউডাটা ["সাবমার্কেট"]! = নাল)। যদি ভিউটি কোনও ত্রুটি ছুঁড়ে না ফেলে রেন্ডার করে (এবং আপনার ড্রপ ডাউন তালিকা ছাড়াই) তবে আপনি নিজের সমস্যাটি চিহ্নিত করে ফেলবেন। এই ক্ষেত্রে "কোনও ভিউ ডেটা আইটেম নেই" ত্রুটিটি খুব বিভ্রান্তিকর।
জিডিবি

আমি এটি ব্যবহার করে একটি Ajax.ActionLink। শুধু যোগ SelectList Getকরতে ActionMethodযে Ajax কল রয়েছে।
দুর্গন্ধ দিন

হ্যাঁ! আমি কন্ট্রোলার থেকে ভিউডাটাতে যাচ্ছিলাম সেই তালিকার নাম পরিবর্তন করেছি, এবং ভিউটিতে এটি পরিবর্তন করা হয়নি। এটি সত্যিই মারাত্মক বিভ্রান্তিকর ত্রুটি বার্তা!
নিমিনেম

4
@ জোনাথনসওয়েল আপনাকে ধন্যবাদ, ধন্যবাদ, ধন্যবাদ! এটি আমার সঠিক সমস্যা ছিল।
johnw182

30

পুরানো প্রশ্ন, তবে সমস্যার আরও ব্যাখ্যা এখানে। আপনার দৃ drop় মতামত টাইপ করা থাকলেও এবং আপনার ড্রপডাউন তালিকা তৈরি করতে ভিউডাটা ব্যবহার না করেও আপনি এই ত্রুটিটি পেয়ে যাবেন। আপনি এমভিসি উত্সটি দেখলে ত্রুটির কারণ স্পষ্ট হয়ে উঠতে পারে :

// If we got a null selectList, try to use ViewData to get the list of items.
if (selectList == null)
{
    selectList = htmlHelper.GetSelectData(name);
    usedViewData = true;
}

সুতরাং যদি আপনার মতো কিছু থাকে:

@Html.DropDownList("MyList", Model.DropDownData, "")

এবং Model.DropDownDataনাল, এমভিসি আপনার ভিউডাটা নামক MyListকোনও কিছুর জন্য অনুসন্ধান করে এবং সেই নামের সাথে ভিউডাটাতে কোনও জিনিস না থাকলে ত্রুটি ছুঁড়ে দেয়।


4
হাই, এটিও আমার সমস্যা, তালিকাটি বাতিল হলে আমরা কী করব ! আপনি কি কিছু পরামর্শ দিতে পারেন,
ট্রান্সফর্মার

4
@ ট্রান্সফর্মার সবচেয়ে সহজ কাজটি হল মডেল.ড্রপডাউনডাটা শূন্যের পরিবর্তে একটি খালি তালিকায় সেট করা। যদি এটি সম্ভব না হয় তবে তালিকাটি বাতিল কিনা তা পরীক্ষা করতে আপনি আপনার রেজার মার্কআপ পরিবর্তন করতে পারেন এবং যদি তা হয় তবে খালি নির্বাচন তালিকা রেন্ডার করুন।
হক্কে

15

আমার একই ত্রুটি ছিল, আমি মনে করি যে সমস্যাটি ত্রুটিটির পাঠ্যকে বিভ্রান্ত করছে , কারণ এটি একটি ভুয়া কী নাম দেয়।

আপনার ক্ষেত্রে এটির বলা উচিত "আইইনুমারেবল" টাইপের কোনও ভিউডেটা আইটেম নেই যা "সাবমার্কেটস" "কী আছে।

আমার ত্রুটিটি ভিউ কোডে (আপনার "সাবমার্কেটস") ভুল বানান ছিল, তবে ত্রুটির পাঠ্যটি আমাকে পাগল করে তুলেছিল।

আমি এই উত্তরটি পোস্ট করেছি কারণ আমি বলতে চাই যে লোকেরা এই ত্রুটিটি খুঁজছেন, যেমন আমার মতো ছিল যে সমস্যাটি হ'ল এটি আইএনওনামারেবলের সন্ধান না করে বরং এটির জন্য অনুসন্ধান করা উচিত (এই ক্ষেত্রে "সাবমার্কেটস"), ত্রুটিতে দেখানো একের মধ্যে নয় ("submarket_0")

গৃহীত উত্তরটি খুব আকর্ষণীয়, তবে যেমন আপনি বলেছিলেন যে আপনি দ্বিতীয় প্যারামিটারটি নির্দিষ্ট না করে কনভেনশনটি প্রয়োগ করা হয়েছে, এক্ষেত্রে এটি নির্দিষ্ট করা হয়েছিল, তবে ভেরিটি পাওয়া যায় নি (আপনার ক্ষেত্রে যেমন ভিউডেটা না ছিল, কারণ আমার ক্ষেত্রে কারণ) আমি ভেরি নামের ভুল বানান)

আশাকরি এটা সাহায্য করবে!


9

সাবমিট বাটনে ক্লিক করে পোস্ট ব্যাক হওয়ার কারণে সমস্যাটি ঘটে। তাই সাবমিটে ডেটা পোস্ট করার সময় আবার ক্লিক করে লিখুন ভিউ ()

ViewData["Submarkets"] = new SelectList(submarketRep.AllOrdered(), "id", "name");

3

নেমস্পেসটি পরীক্ষা করুন।

আপনি দায়িত্ব অর্পণ পারে System.Web.Webpages.Html.SelectListItem কন্ট্রোলার এ, পরিবর্তে System.Web.Mvc.SelectListItem


1

এটিও ঠিক আছে; উদাহরণস্বরূপ:
==> "নাম্বার নিয়ন্ত্রণকারী" ফাইলটিতে:

public ActionResult Create([Bind(Include = "NumberId,Number1,Number2,OperatorId")] Number number)
{
    if (ModelState.IsValid)
    {
        ...
        ...
        return RedirectToAction("Index");
    }
    ViewBag.OperatorId = new SelectList(db.Operators, "OperatorId", 
                                "OperatorSign", number.OperatorId);                
    return View();
}

==> ফাইলটিতে (ক্রিয়েট.আরএসটিএমএল):

<div class="form-group">
    @Html.LabelFor(model => model.Number1, htmlAttributes: new { @class = 
                   "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.Number1, new { htmlAttributes = new { 
                        @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Number1, "", new { @class = 
                                   "text-danger" })
    </div>
</div>

এখন যদি আমরা এই বিবৃতিটি সরিয়ে ফেলি:

ViewBag.OperatorId = new SelectList(db.Operators, "OperatorId", "OperatorSign", number.OperatorId);

নিম্নলিখিত বিবৃতিটির পিছনে থেকে (আমাদের নিয়ামকটিতে):

return View();

আমরা এই ত্রুটিটি দেখতে পাব:

'আইনিউমারেবল' টাইপের কোনও ভিউডেটা আইটেম নেই যাতে 'অপারেটরআইডি' রয়েছে।

* সুতরাং এই বিবৃতি বিদ্যমান সম্পর্কে নিশ্চিত হন। *


0

আমার জন্য, যখন এই ডাটাবেসে একটি নতুন সারিটি সংরক্ষণ করছিলাম তখন এই ত্রুটিটি দেখা দিয়েছে এমন সমস্যা দেখা দিয়েছে তবে একটি ক্ষেত্র শূন্য ছিল। ডাটাবেস টেবিল ডিজাইনে, ক্ষেত্রটি শূন্য নয়। সুতরাং যখন আমি নল-শূন্য ক্ষেত্রের নাল মান সহ একটি নতুন সারিটি সংরক্ষণ করার চেষ্টা করেছি, তখন ভিজ্যুয়াল স্টুডিও এই ত্রুটিটি ছুঁড়ে ফেলেছে। সুতরাং, আমি নিশ্চিত করেছিলাম যে ক্ষেত্রটি একটি মূল্য নির্ধারিত হয়েছিল, এবং সমস্যাটি স্থির হয়েছিল।


0

আমার ক্ষেত্রে, আমি খুঁজে পেয়েছি যে আমি পোস্ট পদ্ধতিটি ভুল হিসাবে ব্যক্তিগত হিসাবে সেট করেছি। জনসাধারণের কাছে ব্যক্তিগত পরিবর্তন করার পরে।

[HttpPost]
private async Task<ActionResult> OnPostRemoveForecasting(){}

পরিবর্তন

[HttpPost]
public async Task<ActionResult> OnPostRemoveForecasting(){}

এখন ঠিক কাজ করে।


0

কারণ অবজেক্টের অনুপযুক্ত ব্যবহারের চেয়ে সিনট্যাক্সের বিপরীতে নয়। ভিউটাটা, ভিউব্যাগ, এবং দেখুন লাইফ চক্রের অবজেক্টের লাইফ সাইকেলটি অধিবেশনটির চেয়ে কম। ফরমার্সে সংজ্ঞায়িত ডেটা একটি অনুরোধ-প্রতিক্রিয়া হওয়ার পরে হারিয়ে যাবে (যদি কোনও অনুরোধ-প্রতিক্রিয়ার পরে অ্যাক্সেস করার চেষ্টা করে তবে আপনি ব্যতিক্রম পাবেন)। সুতরাং অস্থায়ী ডেটা সংরক্ষণের জন্য পরবর্তীকর্তারা ভিউ এবং কন্ট্রোলারের মধ্যে ডেটা পাস করার জন্য উপযুক্ত। অস্থায়ী ডেটাটি সেশনে সংরক্ষণ করা উচিত যাতে বহুবার অ্যাক্সেস করা যায়।


-1

আমার ক্ষেত্রে নেমস্পেসে বিরোধ ছিল, আমার আছে:

using System.Web.Mvc;

এবং

using System.Collections.Generic;

আমি এমভিসিটি স্পষ্টভাবে ব্যবহার করতে চাই তাই আমি এটিকে ঘোষণা করেছিলাম:

new System.Web.Mvc.SelectList(...)

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