এক্সটেনশন পদ্ধতিগুলি গতিশীলভাবে প্রেরণ করা যায় না


114

আমি এমভিসিতে ড্রপডাউনলিস্টফোর করতে চাই

@foreach (var item in Model)
{
    @Html.DropDownListFor(modelItem => item.TitleIds, new SelectList(ViewBag.TitleNames as System.Collections.IEnumerable, "TitleId", "Title.TitleText"), "No: " + ViewBag.MagNo, new { id = "TitleIds" })   
}

নিয়ামক মধ্যে

public ActionResult ArticleList(int id)
{
    ArticleWriter_ViewModel viewModel = new ArticleWriter_ViewModel();
    Func<IQueryable<NumberTitle>, IOrderedQueryable<NumberTitle>> orderByFunc = null;
    Expression<Func<NumberTitle, bool>> filterExpr = null;
    if (id > 0)
    {
        filterExpr = p => p.MagazineId.Equals(id);
    }
    var wholeTitles = unitOfWork.NumberTitleRepository.Get(filterExpr,  orderByFunc, "Magazine,Title").ToList();          

    ViewBag.MagNo = wholeTitles[0].Magazine.MagNo.ToString();
    ViewBag.MagId = wholeTitles[0].Magazine.Id;
    ViewBag.TitleNames = wholeTitles;

    return View("../Panel/Magazine/ArticleList", "_BasicLayout", viewModel);
}

তবে আমি এই ত্রুটি পেয়েছি

' System.Web.Mvc.HtmlHelper<System.Collections.Generic.IEnumerable<Cinemavaadabiat.ViewModel.ArticleWriter_ViewModel>>' নামের কোনও প্রয়োগযোগ্য পদ্ধতি নেই ' DropDownListFor' তবে এটি নামের দ্বারা একটি এক্সটেনশন পদ্ধতি রয়েছে বলে মনে হয়। এক্সটেনশন পদ্ধতিগুলি গতিশীলভাবে প্রেরণ করা যায় না। গতিশীল আর্গুমেন্ট কাস্টিং বা এক্সটেনশন পদ্ধতি সিনট্যাক্স ছাড়াই এক্সটেনশন পদ্ধতি কল করার বিষয়ে বিবেচনা করুন।

আমি ত্রুটি বুঝতে পারি না, এটির জন্য আমার কী পরীক্ষা করা উচিত?

উত্তর:


199

আপনি এক্সটেনশন পদ্ধতিগুলিতে গতিশীল প্রকারগুলি ব্যবহার করছেন, যা সমর্থিত নয়।

গতিশীল প্রকারগুলিকে প্রকৃত প্রকারে কাস্ট করুন এবং এটি কার্যকর হবে।

আমি এখন যা দেখছি তা থেকে আমি বলব:

(string) ViewBag.MagNo

যার ফলস্বরূপ হবে

@foreach (var item in Model)
{
    @Html.DropDownListFor(modelItem => item.TitleIds, 
       new SelectList(ViewBag.TitleNames as System.Collections.IEnumerable, 
       "TitleId", "Title.TitleText"), 
       "No: " + (string) ViewBag.MagNo, 
       new { id = "TitleIds" })   
}

2
এটি বলে যে টাইপ 'স্ট্রিং' কে 'ইনট' এ রূপান্তর করতে পারে না
nnmmss

3
@nnmmss তারপর ভিউব্যাগ.ম্যাগনো কোনও ইনট নয়, স্ট্রিং। এটিকে একটি স্ট্রিংয়ে কাস্ট করুন এবং আপনার স্বর্ণ হতে হবে
বাস

এই উত্তরটি আসল সমস্যাটির সত্যই সম্বোধন করে না - কোডটি কাস্টিং ব্যতীত অন্য প্রকল্পগুলিতে কাজ করে, কেবল তার মধ্যে নয় - সম্ভবত কিছু কনফিগারেশন রয়েছে এবং এটি সংকলককে বিভ্রান্ত করছে। - সম্পাদনা করুন: দেখে মনে হচ্ছে @ এমকাজের উত্তরটি আসল ইস্যুকে সম্বোধন করে।
BrainSlugs83

আমি কি টাইপ ViewBag.MagNoকরতে পারি bool??
ডিলান জেজেনস্কি

আমি একটি পূর্ণসংখ্যা পাস ছিল। আমি কী (স্ট্রিং) ভিউব্যাগ.মাইনিম্বার.টোস্ট্রিং () করে শেষ করেছি। কেবলমাত্র ToString () বা (স্ট্রিং) যুক্ত করা ব্যতিক্রম ছোঁড়ে। ইয়াহ আমি খুব অদ্ভুত।
এসজেডটি

44

এই সমস্যার জন্য আমার সংশোধনটি হ'ল:

    @model MyModel

আংশিক নিয়ন্ত্রণের শীর্ষে। আমি এটা ভুলে গিয়েছিলাম।


ধন্যবাদ, আমি আমার মতামতগুলি অন্য প্রকল্পে স্থানান্তরিত করেছিলাম এবং আমি @ মডেলকে ধন্যবাদ ভুলে গেছি!
rochasdv

3
আপনি যদি ছোট হাতের মডেলের পরিবর্তে বড় আকারের @ মডেল ব্যবহার করেন তবে আপনি এই ত্রুটিটি পেতে পারেন।
তীমথিয় কানস্কি

5

এমভিসি এক্সটেনশন পদ্ধতিগুলির বিষয়ে প্রসারিত করতে (আমি কীভাবে এই প্রশ্নটি ছড়িয়ে দিয়েছি), আমি ডাপারের connection.Query()সিনট্যাক্সটি ব্যবহার করতে চাই যা ফলাফলগুলি হিসাবে ফিরে আসবেIEnumerable<dynamic>

এটি দ্বারা গতিশীল অবজেক্টগুলি ব্যবহার করাও সম্ভব:

  • স্ট্যান্ডিক পদ্ধতিটি সরাসরি কল করা, জন স্কিটির উত্তর অনুসারে :

    @model IEnumerable<dynamic>
    
    @PartialExtensions.Partial(Html, "~/link/to/_partialView.cshtml", Model)
  • এটি একটি ক্লাসে মোড়ানো।

    public class DynamicQueryResult
    {
        public dynamic QueryResults {get; set;}
    }

    তারপরে আপনার এমভিসি ভিউতে:

    @model Namespace.DynamicQueryResult
    
    @Html.Partial("~/link/to/_partialView.cshtml", Model)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.