এএসপি.নেট এমভিসি: এই অবজেক্টের জন্য কোনও প্যারামিটারলেস কনস্ট্রাক্টর সংজ্ঞায়িত হয়নি


172
Server Error in '/' Application.
--------------------------------------------------------------------------------

No parameterless constructor defined for this object. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.MissingMethodException: No parameterless constructor defined for this object.

Source Error: 


Line 16:             HttpContext.Current.RewritePath(Request.ApplicationPath, false);
Line 17:             IHttpHandler httpHandler = new MvcHttpHandler();
Line 18:             httpHandler.ProcessRequest(HttpContext.Current);
Line 19:             HttpContext.Current.RewritePath(originalPath, false);
Line 20:         }

আমি স্টিভেন স্যান্ডারসনের ' প্রো এএসপি। নেট এমভিসি ফ্রেমওয়ার্ক ' বইটি অনুসরণ করছিলাম । পৃষ্ঠার ১৩২ পৃষ্ঠায়, লেখকের সুপারিশ অনুসারে, আমি এএসপি.নেট এমভিসি ফিউচার অ্যাসেম্বলিটি ডাউনলোড করেছি এবং এটি আমার এমভিসি প্রকল্পে যুক্ত করেছি। [দ্রষ্টব্য: এটি একটি লাল রঙের হেরিং হতে পারে]]

এর পরে, আমি আর আমার প্রকল্পটি লোড করতে পারি না। উপরের ত্রুটিটি আমাকে ঠান্ডা করে দিয়েছে।

আমার প্রশ্নটি নয় , "আপনি কি আমার কোড ঠিক করতে আমাকে সহায়তা করতে পারেন?"

পরিবর্তে, আমি আরও সাধারণভাবে জানতে চাই:

  • এই সমস্যাটি কীভাবে সমাধান করা উচিত?
  • আমার কী সন্ধান করা উচিত?
  • এর মূল কারণ কী হতে পারে?

দেখে মনে হচ্ছে আমার এখনকার চেয়ে আরও গভীর স্তরে রাউটিং এবং কন্ট্রোলারগুলি বোঝা উচিত।

উত্তর:


226

আমার সবেমাত্র একই সমস্যা ছিল। Modelপ্যারামিটারলেস কনস্ট্রাক্টর না থাকলে একই ব্যতিক্রম ঘটে ।

কল স্ট্যাকটি একটি মডেলের একটি নতুন উদাহরণ তৈরি করার জন্য দায়বদ্ধ একটি পদ্ধতি আবিষ্কার করছিল।

System.Web.Mvc.DefaultModelBinder। ক্রিয়েটমোডেল (কন্ট্রোলারফন্ট


এখানে একটি নমুনা দেওয়া হল:

public class MyController : Controller
{
    public ActionResult Action(MyModel model)
    {

    }
}

public class MyModel
{
    public MyModel(IHelper helper) // MVC cannot call that
    {
        // ...
    }

    public MyModel() // MVC can call that
    {
    }
}

16
আমার ক্রিয়ায় JSON ডেটা পোস্ট করার সময় আমি একই ধরণের ত্রুটি পেয়েছিলাম। এটি আমার মডেলটিকে সরিয়ে দেয় যা এটি বাঁধতে চেষ্টা করছে যা প্যারামিটারলেস কনস্ট্রাক্টর নেই!
টিম

1
এনবি: সিরিয়ালাইজেশনের সময় আমি কেবল এই সমস্যাটি (কোনও প্যারামিটারলেস ব্লে ব্লে ... না) পেয়ে থাকি যদি আমি কোনও কনস্ট্রাক্টর সংজ্ঞায়িত করি, এবং প্যারামিটারলেস কনস্ট্রাক্টর না। আমি বলতে চাইছি, উদাহরণস্বরূপ, আপনি যদি নির্ধারিত কনস্ট্রাক্টর (পাবলিক মাইমোডেল (আইহেল্পার সহায়ক) delete}) মুছে ফেলেন তবে সমস্যাটি অদৃশ্য হয়ে যায় ... সুতরাং আপনি যখনই কোনও কনস্ট্রাক্টর তৈরি করেন, আপনাকে প্যারামিটারলেস তৈরি করতে হবে ... আমি বুঝতে পারি এটির মতো: একবার আপনি কোনও কনস্ট্রাক্টরকে সংজ্ঞায়িত করা শুরু করলে, সিস্টেমটি 'ডিফল্ট অবজেক্টস' তৈরির ঝুঁকি নেয় না কারণ এটি বোঝে না কিনা তা জানা নেই ... এরকম কিছু।
এইচএইচই

1
টিপলস ... সম্ভবত এখানে আসা অন্য কিছু লোকের জন্য: আপনার ক্লাসে যদি কেবল টিপলস থাকে (যেমন টিপল <স্ট্রিং, স্ট্রিং> ডেটা;) থাকে, সিরিয়ালাইজেশন ঠিক থাকবে (কারণ আমি জেএসএন সিরিয়ালাইজেশনের সময় এই সমস্যার মুখোমুখি হয়েছিলাম) ... তবে আপনি যদি তালিকা <টিপল <স্ট্রিং, স্ট্রিং >> ডেটার মতো কিছু ব্যবহার করেন; আপনি 'কোনও প্যারামিটারলেস কনট্রাক্টর' ত্রুটি থাকা শুরু করবেন। কারণ। নেট টিপলস তৈরি করতে / তৈরি করতে পারে না (আমার কাছে এর জন্য রেফ নেই তবে টুপল <স্ট্রিং, স্ট্রিং> ডেটা = নতুন টিপল <স্ট্রিং, স্ট্রিং> (); সংকলন করবে না ... টুপল <স্ট্রিং, স্ট্রিং> ডেটা = নতুন টিপল <স্ট্রিং, স্ট্রিং> ("", ""); ঠিক আছে
এইচএইচইহ

3
হ্যাঁ, তবে আপনি কীভাবে কোনও ক্লাসে প্যারামিটারলেস কনস্ট্রাক্টর যুক্ত করবেন যার নির্ভরতা রয়েছে এবং আপনি সেগুলি কনস্ট্রাক্টারে ইনজেকশন করতে চান? আমি যে
সমস্যারই মুখোমুখি হচ্ছি

2
@ তোয়াওজি আপনার নির্ভরতা ইনজেকশন লাইব্রেরিতে আপনাকে "ইনজেকশন কনস্ট্রাক্টর" নির্বাচন করার একটি উপায় সরবরাহ করা উচিত। বিটিডব্লিউ, ভিউ মডেলগুলিতে নির্ভরতা ইনজেকশন থাকা অদ্ভুত দেখাচ্ছে।
স্যান্ডরক

89

যদি আপনার মডেলটি একটি নির্বাচন তালিকা ব্যবহার করে তবে এটির কারণও হতে পারে, কারণ এতে কোনও প্যারামিটারলেস কনস্ট্রাক্টর নেই :

public class MyViewModel
{
    public SelectList Contacts { get;set; }
}

যদি এটির কারণ হয় তবে আপনার মডেলটিকে অন্যভাবে এটি করার জন্য আপনাকে রিফ্যাক্টর করতে হবে। সুতরাং একটি ব্যবহার করে IEnumerable<Contact>এবং একটি এক্সটেনশন পদ্ধতি লিখে যা বিভিন্ন সম্পত্তি সংজ্ঞা সহ ড্রপ ডাউন তালিকা তৈরি করে:

public class MyViewModel
{
    public Contact SelectedContact { get;set; }
    public IEnumerable<Contact> Contacts { get;set; }
}

public static MvcHtmlString DropDownListForContacts(this HtmlHelper helper, IEnumerable<Contact> contacts, string name, Contact selectedContact)
{
    // Create a List<SelectListItem>, populate it, return DropDownList(..)
}

অথবা আপনি @ মার্ক এবং @ ক্রিলোভিচ পদ্ধতির ব্যবহার করতে পারেন, কেবলমাত্র নির্বাচনী তালিকাটি আইউনামেবলের প্রতিস্থাপনের প্রয়োজন, এটি মাল্টিসিলেক্টলিস্টের সাথেও কাজ করে।

 public class MyViewModel
    {
        public Contact SelectedContact { get;set; }
        public IEnumerable<SelectListItem> Contacts { get;set; }
    }

1
আমি এটির জন্য অনেক সময় নষ্ট করেছি ... এবং আমার সহায়ক ফাংশনটি চালু করতে হয়েছিল যা একটি বাছাই তালিকাটি আবার একটি তালিকাতে ফিরে আসবে <সিলেক্টলিস্ট আইটেম> .... ব্লার্গ
মার্ক

আপনি অনুমিত <সलेक्टলিস্ট আইটেম> ব্যবহার করতে পারেন এবং এগুলি আপনার নির্মাণকারীতে নতুন তালিকা হিসাবে বেছে নিতে পারেন <সেলেক্টলিস্ট আইটেম> ()
ক্রিলোভিচ

আপনাকে 3.5 বছর পরে ধন্যবাদ!
টনিপোলিস

ধন্যবাদ এটি অত্যন্ত সহায়ক ছিল!
কেভিন কুলসন

এখনও বৈধ 5 বছর পরে। ধন্যবাদ!
নিল

23

প্যারামিটার না রাখার জন্য আপনার ক্রিয়াটি নিয়ামকের সাথে সম্পর্কিত need

আপনার কাছে থাকা নিয়ামক / ক্রিয়া সংমিশ্রণের জন্য দেখে মনে হচ্ছে:

public ActionResult Action(int parameter)
{

}

তবে আপনার দরকার

public ActionResult Action()
{

}

এছাড়াও, ফিল হ্যাকের রুট ডিবাগারটি রুটগুলির সমস্যা সমাধানের জন্য দেখুন।


6
ব্যতিক্রমটি কন্সট্রাক্টরের সাথে সম্পর্কিত, ক্রিয়া পদ্ধতি নয়।
জেসন উইকার

4
@Logrythmik। রিপোর্ট করা ব্যতিক্রম কনস্ট্রাক্টরের জন্য, তবে সমস্যাটি অ্যাকশন পদ্ধতিতে। আমার একটি ক্লাস এবং অ্যাকশন পদ্ধতি ছিল যা কাজ করছিল, তারপরে অ্যাকশন পদ্ধতিতে একটি পরামিতি যুক্ত করে এই ত্রুটিটি পেয়েছি। বিকল্প সমাধান হ'ল প্যারামিটারের জন্য একটি মান সরবরাহ করা। বা প্যারামিটারটি
alচ্ছিক করুন

এছাড়াও, যদি আপনি @ এইচটিএমএল.একশন ("সামারএকশন", নতুন {মাইপ্যারামিটার = "42"}) এর মতো কিছু করছেন তবে নিশ্চিত হয়ে নিন যে আপনার এইচটিএমএল.অ্যাকশন কলটিতে প্যারামিটারের নামটি প্যারামিটারের সাথে সংজ্ঞায়িত হয়েছে defined আপনার কর্ম পদ্ধতি!
জেটি টেইলর

20

ডিফল্টরূপে, এমভিসি কন্ট্রোলারগুলির কোনও পরামিতি ছাড়াই একটি ডিফল্ট নির্মাণকারী প্রয়োজন। সবচেয়ে সহজ হ'ল একটি ডিফল্ট কনস্ট্রাক্টর তৈরি করা যা প্যারামিটারগুলির সাথে কল করে:

public MyController() : this(new Helper()) {
}

public MyController(IHelper helper) {
  this.helper = helper;
}

তবে আপনি নিজের রোলিং করে এই কার্যকারিতাটি ওভাররাইড করতে পারেন ControllerFactory। এইভাবে আপনি এমভিসিকে বলতে পারেন যে আপনি যখন তৈরি করছেন তখন MyControllerএটির একটি উদাহরণ দিন Helper

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


6
আমি মনে করি না যে এটি সঠিক উত্তর, @ সুইলিয়ামস ams এখানে কীটি হ'ল অংশ: এই বস্তুর জন্য সংজ্ঞায়িত । এটি একটি ক্র্যাপ ত্রুটি বার্তা যা প্রকৃতপক্ষে পাস করা ইনপুট মডেলগুলিতে ইঙ্গিত করে তৈরি করা যায় না। সুতরাং আপনার যদি কোনও ইনপুট মডেল থাকে যার কোনও প্যারামিটারলেস কনস্ট্রাক্টর নেই, তবে আপনি এই ত্রুটিটি পান। এটি কন্ট্রোলার নির্মাতার সাথে সম্পর্কিত বলে মনে করা খুব সহজ। কিন্তু এটা না.
খাঁটি.ক্রোম

1
এটি একটি কৃপণ বার্তা, এটি যদি কোনও বুনো হাঁসের তাড়া করে তবে তা যদি এর মতো প্রতিক্রিয়া না হয়। এই উত্তর এবং উপরের প্রতিক্রিয়ার জন্য ধন্যবাদ, আমি জিনিসগুলি দূরে সরিয়ে দিতে সক্ষম হয়েছি। আমার ধারণা, পর্দার অন্তর্ভুক্ত বাইন্ডার কী করছে তা পুরোপুরি না বোঝার বিষয়। আমি অনুভব করেছি এটি কেবল প্রতিটি সম্পত্তি সেট করবে তবে কোনও কারণে এটি পোস্ট করার সাথে সাথে সেটিংস করার আগে এই কলটি কল করে। সুতরাং যেহেতু আমি আমার কনস্ট্রাক্টরকে ওভারলোড করেছি এবং একটি কম প্যারামিটার কম কনস্ট্রাক্টর দিয়ে ক্ষতিপূরণ দিতে হয়েছিল আমার নালীর জন্য আমার কিছু সম্পত্তি পেয়েছিল যা অপ্রত্যাশিতও ছিল।
agগলই

18

আইডিপেন্ডেন্সি রিসোলভার ব্যবহার করার সময়ও এই ত্রুটি ঘটে থাকে যেমন আইওসি পাত্রে ব্যবহার করার সময় এবং নির্ভরতা সমাধানকারী শূন্য করে দেয়। এক্ষেত্রে এএসপি.নেট এমভিসি 3 টি ডিফল্ট ডিফল্ট কনট্রোলার অ্যাক্টিভেটরটি অবজেক্ট তৈরি করতে ব্যবহার করে। যদি তৈরি করা অবজেক্টটিতে সর্বজনীন নো-আরগস কনস্ট্রাক্টর না থাকে তবে প্রদত্ত নির্ভরতা সমাধানকারীটি বাতিল হয়ে গেলে যে কোনও সময় নিক্ষেপ করা হবে।

এই জাতীয় একটি স্ট্যাক ট্রেস এখানে:

[MissingMethodException: No parameterless constructor defined for this object.]
   System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
   System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98
   System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241
   System.Activator.CreateInstance(Type type, Boolean nonPublic) +69
   System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +67

[InvalidOperationException: An error occurred when trying to create a controller of type 'My.Namespace.MyController'. Make sure that the controller has a parameterless public constructor.]
   System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +182
   System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +80
   System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +74
   System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +232
   System.Web.Mvc.<>c__DisplayClass6.<BeginProcessRequest>b__2() +49
   System.Web.Mvc.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a() +13
   System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func`1 func) +124
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +98
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +50
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8963444
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

2
এটি আমার সমস্যার কারণ হয়ে দাঁড়িয়েছে: আমার নির্ভরতা সমাধানকারী একটি ব্যতিক্রমের কারণে আমার নিয়ামক তৈরি করতে অক্ষম। এটি রিসলভার দ্বারা গ্রাস করা হয়েছিল, নাল ফিরে গেছে এবং এমভিসি কাঠামোটি ত্রুটি বর্ণিত হওয়ার ফলে ডিফল্ট নিয়ামক অ্যাক্টিভেটরে স্যুইচ করে।
বেরিজ

@ jmona789 আপনি আপনার Global.asax এ আপনার সমস্ত ইনজেকশন নির্ভরতা নির্ধারণ করেছেন কিনা তা পরীক্ষা করে দেখুন।
এলোআইএসডিজি 20:39

13

আপনি এই ব্যতিক্রম এমভিসি ফ্রেমওয়ার্কের বিভিন্ন স্থানে পেতে পারেন (যেমন এটি নিয়ামক তৈরি করতে পারে না, বা এটি নিয়ামক দেওয়ার জন্য কোনও মডেল তৈরি করতে পারে না)।

এই সমস্যাটি সনাক্ত করার একমাত্র সহজ উপায়টি হ'ল এমভিসিটিকে নিজের কোড সহ যতটা সম্ভব ব্যতিক্রমের কাছাকাছি স্থিত করা। তারপরে যখন এই ব্যতিক্রম ঘটে তখন আপনার কোড ভিজ্যুয়াল স্টুডিওর অভ্যন্তরে ভেঙে যায় এবং আপনি স্ট্যাক ট্রেস থেকে সমস্যার কারণটি পড়তে পারেন।

এটি এই সমস্যার কাছে যাওয়ার এক ভয়ঙ্কর উপায় বলে মনে হচ্ছে তবে এটি খুব দ্রুত এবং খুব সামঞ্জস্যপূর্ণ।

উদাহরণস্বরূপ, যদি এই ত্রুটিটি এমভিসি ডিফল্টমোডালবাইন্ডারের ভিতরে ঘটে থাকে (যা আপনি স্ট্যাকের চিহ্নটি পরীক্ষা করে জানতে পারবেন), তবে এই কোডটি দিয়ে ডিফল্ট মডেলবাইন্ডারটি প্রতিস্থাপন করুন:

public class MyDefaultModelBinder : System.Web.Mvc.DefaultModelBinder
{
    protected override object CreateModel(System.Web.Mvc.ControllerContext controllerContext, System.Web.Mvc.ModelBindingContext bindingContext, Type modelType)
    {
        return base.CreateModel(controllerContext, bindingContext, modelType);
    }
}

এবং আপনার Global.asax.cs আপডেট করুন:

public class MvcApplication : System.Web.HttpApplication
{
...
    protected void Application_Start(object sender, EventArgs e)
    {
        ModelBinders.Binders.DefaultBinder = new MyDefaultModelBinder();
    }
}

এখন পরের বার আপনি এই ব্যতিক্রমটি পাবেন, ভিজুয়াল স্টুডিওটি আপনার মাইডিফল্টমোডেলবাইন্ডার ক্লাসের অভ্যন্তরে বন্ধ হয়ে যাবে এবং কোন ধরণের সমস্যা তৈরি হয়েছে তা দেখতে আপনি "মডেলটাইপ" সম্পত্তিটি পরীক্ষা করতে পারেন।

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


আমি আমার সমস্যার জন্য এটি করার কথা ভাবছিলাম।
ডগ চেম্বারলাইন

আশা করি আমি এই আরও upvote করতে পারে। আমার সময় কয়েক মিনিটেরও বেশি সময় বাঁচিয়েছে।
কিথ

8

আমি একই ত্রুটি পেয়েছি, আমার মামলার অপরাধী ছিলেন নির্মাতা যা না জনসাধারণ বা বেসরকারী ছিলেন

এই অবজেক্টের জন্য কোনও প্যারামিটারলেস কনস্ট্রাক্টর সংজ্ঞায়িত করা হয়নি।

ব্যতিক্রমের বিবরণ: সিস্টেম.মিসিংমাথোড এক্সেক্সশন: এই অবজেক্টের জন্য কোনও প্যারামিটারলেস কনস্ট্রাক্টর সংজ্ঞায়িত করা হয়নি।

রেপ্রো কোড: কনস্ট্রাক্টরের सार्वजनिक হওয়ার আগে তা নিশ্চিত করুন।

public class Chuchi()
{
     Chuchi()    // The problem is this line. Public is missing
     {
         // initialization
         name="Tom Hanks";
     }

    public string name
    {
        get;
        set;
    }
}

4
ঠিক যেমন একটি নোট, একটি সংযোজনকারীর ডিফল্টটিতে অ্যাক্সেস মডিফায়ারের অভাব সংকলকটিতে "অভ্যন্তরীণ" এ রয়েছে।
lsuarez

1
সেখানে "প্রাইভেট" সংশোধক রাখলে সমস্যার সমাধান হবে না।
krzyski

7

Http://tekpub.com/conferences/mvcconf এ প্রথম ভিডিও

47:10 মিনিটের ত্রুটিটি দেখায় এবং কীভাবে ডিফল্ট কন্ট্রোলার ফ্যাক্টরিটিকে ওভাররাইড করতে হয় তা দেখায়। অর্থাৎ কাঠামো মানচিত্র নিয়ন্ত্রক কারখানা তৈরি করা।

মূলত, আপনি সম্ভবত নির্ভরতা ইনজেকশন প্রয়োগের চেষ্টা করছেন ??

সমস্যাটি হ'ল ইন্টারফেস নির্ভরতা।


এবং আপনি এমভিসি স্টোরফ্রন্ট প্রকল্প থেকে স্ট্রাকচারম্যাপকন্ট্রোলারফ্যাক্টরি ক্লাস পেতে পারেন
গৌতম জৈন

6

আমি একই ত্রুটি পেয়েছিলাম যখন:

একটি কাস্টম মডেলভিউ ব্যবহার করে, উভয় ক্রিয়া (জিইটি এবং পোষ্ট) দুটি মডেলভিউ পেরিয়ে যাচ্ছিল যাতে দুটি বস্তু রয়েছে:

public ActionResult Add(int? categoryID)
{
    ...
    ProductViewModel productViewModel = new ProductViewModel(
            product,
            rootCategories
            );
    return View(productViewModel); 
}

এবং পোষ্টও একই মডেল দর্শন গ্রহণ করে:

[HttpPost]
[ValidateInput(false)]
public ActionResult Add(ProductModelView productModelView)
{...}

সমস্যাটি ছিল মডেলভিউ (বিভাগ এবং বিভাগের তথ্যের তালিকা উভয়ই প্রয়োজন) পেয়েছিল, তবে জমা দেওয়ার পরে কেবল পণ্য পণ্যটিই প্রত্যাবর্তন করা হয়েছিল, তবে পোষ্ট যুক্ত হিসাবে প্রত্যাশিত একটি পণ্য মডেলভিউ এটি একটি ন্যূনাল পাস করেছে তবে প্রোডাক্টমোডালভিউয়ের জন্য কেবল কনস্ট্রাক্টরের দুটি পরামিতি প্রয়োজন ( প্রোডাক্ট, রুট ক্যাটাগরিস), তারপরে এই ন্যুনাল কেসটির কোনও প্যারামিটার ছাড়াই অন্য কোনও কনস্ট্রাক্টরকে সন্ধান করার চেষ্টা করা হয়েছে তারপরে "কোনও প্যারামিটারেল নেই ..." ব্যর্থ হয়

সুতরাং, নীচে POST অ্যাড সংশোধন করে সমস্যার সংশোধন করুন:

[HttpPost]
[ValidateInput(false)]
public ActionResult Add(Product product)
{...}

আশা করি এটি কাউকে সহায়তা করতে পারে (এটি প্রায় খুঁজে পেতে আমি প্রায় অর্ধ দিন কাটিয়েছি!)।


নেস্টর, এটি আলোকিত এবং সঠিক বলে মনে হচ্ছে। তবে কেন ভিউ অন্য কোনও অবজেক্ট ফিরিয়ে দিচ্ছে তবে তা তা পাচ্ছে, অর্থাত্ কোনও পণ্য অবজেক্ট এবং প্রোডাক্টভিউমোডেল নয়?
গিলশালিত

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

গিলশালিত, আজ আমি একটি উত্তর পেয়েছি (দুঃখিত আমি ধীর!) এইচটিএমএল রেন্ডার করে তাকিয়ে দেখলাম ইনপুটটি [অবজেক্টনাম] এর নাম নিচ্ছে। [সম্পত্তি], তবে মূল ভিউমোডেলের সন্ধান নেই, সুতরাং আপনি কেবলমাত্র প্রতিটি ব্যক্তিকে পুনরুদ্ধার করতে পারবেন ভিউমোডেলের অভ্যন্তরে অবজেক্ট, তবে সম্পূর্ণ ভিউমোডেল নিজেই নয়। উদাহরণ:, যদি আপনার প্রোডাক্টভিউমোডেল ভিএম এর ভিতরে প্রোডাক্ট পি এবং বিভাগ সি থাকে তবে আপনার জিইটি কন্ট্রোলার ভিউতে একটি মডেল ভিএম প্রেরণ করে, তবে আপনি পোষ্ট কন্ট্রোলার কেবলমাত্র (পণ্য পি, বিভাগ সি) এর মতো পরামিতি গ্রহণ করতে পারবেন তবে ভিএম নয়। ..আমি যদি ভুল হয় তবে কিছু প্রতিক্রিয়ার প্রশংসা করব would
নেস্টর

5

আমার জন্য একই. আমার সমস্যাটি উপস্থিত হয়েছিল কারণ আমি ভুলে গেছি যে আমার বেস মডেল শ্রেণিতে ইতিমধ্যে নামের সাথে সম্পত্তি রয়েছে যা ভিউতে সংজ্ঞায়িত হয়েছিল

public class CTX : DbContext {  // context with domain models
    public DbSet<Products> Products { get; set; }  // "Products" is the source property
    public CTX() : base("Entities") {}
}

public class BaseModel : CTX { ... }
public class ProductModel : BaseModel { ... }
public class OrderIndexModel : OrderModel  { ... }

... এবং নিয়ামক প্রক্রিয়াকরণ মডেল:

[HttpPost]
[ValidateInput(false)]
public ActionResult Index(OrderIndexModel order) { ... }

বিশেষ কিছু না, তাই না? তবে তারপরে আমি দৃশ্যের সংজ্ঞা দিই ...

<div class="dataItem">
    <%=Html.Label("Products")%>
    <%=Html.Hidden("Products", Model.index)%>   // I FORGOT THAT I ALREADY HAVE PROPERTY CALLED "Products"
    <%=Html.DropDownList("ProductList", Model.products)%>
    <%=Html.ActionLink("Delete", "D")%>
</div>

... যা পোষ্টের অনুরোধে "প্যারামিটারলেস কনস্ট্রাক্টর" ত্রুটির সৃষ্টি করে।

আশা করি এইটি কাজ করবে.


5

আমার একইরকম সমস্যা ছিল এবং মূল কথাটি হ'ল অ্যাকশন পদ্ধতিতে কিছু যুক্তি রয়েছে যা মডেল বাইন্ডিং প্রক্রিয়া দ্বারা সরবরাহ করা হয়নি, (এবং অন্য কথায় এই ক্ষেত্রগুলি জমা দেওয়ার পৃষ্ঠায় জমা দেওয়া হয়নি)।

এই সমস্যাটি আসবে এমনকি সমস্ত যুক্তি সরবরাহ করা হলেও একটি সরবরাহ করা হয়, এবং যদি হারিয়ে যাওয়াটি একটি প্রকারভেদযুক্তও হয়।

সমস্যাটি টাইপোর ফলেও হতে পারে, যাতে ফর্মের ক্ষেত্রের যুক্তির নাম এবং নাম অভিন্ন হবে না।

সমাধানটি 1) যাচাই করা হয় যে নামগুলি 2 টির সাথে মেলে) 3 আর্গুমেন্টের জন্য একটি ডিফল্ট মান সরবরাহ করে) 3 বা এই তর্ক ছাড়াই অন্য ক্রিয়া পদ্ধতি সরবরাহ করে।


ধন্যবাদ @ ইও হাল, আপনার উত্তরটি সে হিসাবে দেখা গেল যা আমার এই ত্রুটির বিশেষ উদাহরণটি সমাধান করেছিল। ফ্রেমওয়ার্কটি যে ত্রুটি বার্তাটি স্পট করে তা হ'ল এই উদাহরণটিতে সবচেয়ে কম দরকারী ত্রুটি বার্তা হতে পারে ।
স্কট লরেন্স

4

আমারও এই সমস্যাটি ছিল এবং আমি ভেবেছিলাম যে আমি ভাগ করে নেব যেহেতু আমি আমার সমস্যাটি উপরে খুঁজে পাচ্ছি না।

এটি আমার কোড ছিল

return RedirectToAction("Overview", model.Id);

এই অ্যাকশন রেজাল্টকে কল করা:

public ActionResult Overview(int id)

আমি ধরে নিয়েছি এটি যথেষ্ট স্মার্ট হবে এটি নির্ধারণের জন্য যে আমি যে মূল্যটি এটি দিয়েছি তা ওভারভিউর আইডি পরামিতি, তবে তা নয়। এটি এটি স্থির করে:

return RedirectToAction("Overview", new {id = model.Id});


4

প্যারামিটারলেস পাবলিক কন্ট্রাক্টর না থাকায় আমি একই ব্যতিক্রম পেয়েছি

কোডটি এরকম ছিল:

public class HomeController : Controller
{        
    private HomeController()
    {
        _repo = new Repository();
    }

পরিবর্তন

 public class HomeController : Controller
{        
    public HomeController()
    {
        _repo = new Repository();
    }

আমার কাছে সমস্যার সমাধান


বেস ক্লাসে সুরক্ষিত কনস্ট্রাক্টর ব্যবহার করার সময় আমারও একই সমস্যা ছিল - এটি এখন একটি সুস্পষ্ট সমাধান বলে মনে হচ্ছে!
keithl8041

4

উত্তরের সমস্তগুলি একটি প্যারামিটার কম কমস্ট্রাক্টর তৈরি করতে বলে যা আপনি যদি অন্য কোনও ডিভ ব্যবহার না করে এবং কেবল মডেল বাইন্ডার চান না তবে এটি আদর্শ নয়।

[Obsolete("For model binding only", true)]যদি কোনও দেব এটি ব্যবহার করার চেষ্টা করে তবে কোনও পাবলিক কনস্ট্রাক্টরের উপরের বৈশিষ্ট্যটি সংকলক ত্রুটি নিক্ষেপ করবে। এটি খুঁজে পেতে আমাকে যুগে যুগে নিয়েছে, আশা করি এটি কারও সাহায্য করবে।


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

3

আমি এই ত্রুটি পেয়েছি। আমি আমার কনস্ট্রাক্টরে ইন্টারফেস ব্যবহার করছিলাম এবং আমার নির্ভরতা সমাধানের সমাধান করতে সক্ষম ছিল না, যখন আমি এটি নিবন্ধভুক্ত করেছি তখন ত্রুটিটি চলে গেছে।


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

2

আমারও একই সমস্যা ছিল ...

আপনি যদি আপনার DbContext (আমার মত) এর সাথে আপনার সংযোগটি দ্বিগুণ করতে ইন্টারফেস ব্যবহার করে থাকেন তবে আপনি আপনার কন্ট্রোলার শ্রেণিতে কোনও কাঠামো ব্যবহার করতে সক্ষম হতে স্ট্রাকচারম্যাপ.এমভিসি (3 বা 4 - নুডেজ প্যাকেজ ) ব্যবহার করতে পারেন। এটি আপনাকে নির্ভরতা সমাধান ফোল্ডার দেবে। আপনার <ইন্টারফেসক্লাস> () এর জন্য এবং <DbContextClass> () ব্যবহার করার জন্য কেবল মন্তব্য করা লাইনটি পরিবর্তন করুন।


2

এটি কারওর কাছে সুস্পষ্ট হতে পারে তবে আমার জন্য এই ত্রুটির অপরাধী আমার এমভিসি পদ্ধতিটি এমন কোনও মডেলের সাথে বাধ্যতামূলক ছিল যাতে কোনও ধরণের সম্পত্তি থাকে Tuple<>Tuple<>কোনও প্যারামিটারলেস কনস্ট্রাক্টর নেই।


1

আমার একই সমস্যা হয়েছিল তবে পরে কোনও নতুন ইন্টারফেস যুক্ত করার সাথে সাথে সম্পর্কিত ক্লাসের জন্য নির্ভরতা ইঞ্জেকশনের জন্য ইনিশিয়ালযোগ্য মডিউলটির নিবন্ধভুক্ত হওয়া আবশ্যক। আমার ক্ষেত্রে এটি কোডের অভ্যন্তরে ছিল:

[InitializableModule]
[ModuleDependency(typeof(EPiServer.Web.InitializationModule))]
public class DependencyResolverInitialization : IConfigurableModule
{

    public void ConfigureContainer(ServiceConfigurationContext context)
    {
        context.Container.Configure(ConfigureContainer);
        var structureMapDependencyResolver = new StructureMapDependencyResolver(context.Container);
        DependencyResolver.SetResolver(structureMapDependencyResolver);
        GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), structureMapDependencyResolver);
    }

    private void ConfigureContainer(ConfigurationExpression container)
    {
        container.For<IAppSettingService>().Use<AppSettingService>();
        container.For<ISiteSettingService>().Use<SiteSettingService>();
        container.For<IBreadcrumbBuilder>().Use<BreadcrumbBuilder>();
        container.For<IFilterContentService>().Use<FilterContentService>().Singleton();
        container.For<IDependecyFactoryResolver>().Use<DependecyFactoryResolver>();
        container.For<IUserService>().Use<UserService>();
        container.For<IGalleryVmFactory>().Use<GalleryVmFactory>();
        container.For<ILanguageService>().Use<LanguageService>();
        container.For<ILanguageBranchRepository>().Use<LanguageBranchRepository>();
        container.For<ICacheService>().Use<CacheService>(); 
        container.For<ISearchService>().Use<SearchService>();
        container.For<IReflectionService>().Use<ReflectionService>();
        container.For<ILocalizationService>().Use<LocalizationService>();
        container.For<IBookingFormService>().Use<BookingFormService>();
        container.For<IGeoService>().Use<GeoService>();
        container.For<ILocationService>().Use<LocationService>();
        RegisterEnterpriseAPIClient(container);
    }

   public void Initialize(InitializationEngine context)
    {
    }

    public void Uninitialize(InitializationEngine context)
    {
    }

    public void Preload(string[] parameters)
    {
    }
}

}


1

আমার ক্ষেত্রে, আমার ক্লাসের [Serializable]বৈশিষ্ট্য ছিল ।

আপনার কোনও কন্সট্রাক্টর থাকা আবশ্যক যা আপনার ক্লাস হলে কোনও পরামিতি নেয় না [Serializable]


0

এই ত্রুটিটি আমার জন্য শুরু হয়েছিল যখন আমি কোনও ক্লাস ইনস্ট্যান্ট করার জন্য একটি নতুন উপায় যুক্ত করেছি।

উদাহরণ:

    public class myClass
    {
         public string id{ get; set; }
         public List<string> myList{get; set;}

         // error happened after I added this
         public myClass(string id, List<string> lst)
         {
             this.id= id;
             this.myList= lst;
         }
     }

আমি এই পরিবর্তনটি করার সময় একটি পরামিতিবিহীন নির্মাণকারী যুক্ত করার পরে ত্রুটিটি সমাধান করা হয়েছিল। আমি বিশ্বাস করি যে সংকলকটি ডিফল্টরূপে একটি প্যারামিটারলেস কন্ডাক্টর তৈরি করে তবে আপনি যদি নিজের নিজস্ব যোগ করেন তবে আপনাকে অবশ্যই এটি স্পষ্টভাবে তৈরি করতে হবে।

    public class myClass
    {
         public string id{ get; set; }
         public List<string> myList{get; set;}

         // error doesn't happen when I add this
         public myClass() { }

         // error happened after I added this, but no longer happens after adding above
         public myClass(string id, List<string> lst)
         {
             this.id= id;
             this.myList= lst;
         }
     }

0

আমি DropDownListআমার ফর্মটিতে একটি যুক্ত করব, তবে আমার ক্ষেত্রে এটি ফর্মের সাথে <form></form>ট্যাগগুলির বাইরে থাকায় জমা দেওয়া হয়নি (এবং এটি করার ইচ্ছা ছিল না) :

@Html.DropDownList("myField", Model.MyField)

মডেলটিতে কেবল প্রদর্শনের জন্য ক্ষেত্রটি অন্তর্ভুক্ত থাকায় ক্ষেত্রটি No parameterless constructor defined for this objectমোটেও জমা দেওয়া হয়নি বলে এটি ত্রুটিও ঘটায় ।

এক্ষেত্রে আমি ব্যতিক্রমী বাধ্যবাধকতা যুক্ত করে এটি ঠিক করেছি:

public ActionResult Foo(int id, int? page, [Bind(Exclude = "MyField")]MyModel model)

0

আমার সাথে এটি ঘটেছিল এবং এই পৃষ্ঠার ফলাফলগুলি একটি ভাল সংস্থান ছিল যা আমাকে অনেক দিকে পরিচালিত করেছিল, তবে আমি আরেকটি সম্ভাবনা যুক্ত করতে চাই:

অন্যান্য উত্তরে যেমন বলা হয়েছে, প্যারামিটারগুলির সাথে কনস্ট্রাক্টর তৈরি করিয়ে দেওয়া প্যারামিটারলেস কনস্ট্রাক্টরকে সরিয়ে দেয়, সুতরাং আপনাকে স্পষ্টভাবে এটি টাইপ করতে হবে।

আমার সমস্যাটি হ'ল ডিফল্ট প্যারামিটার সহ কোনও কনস্ট্রাক্টরও এই ব্যতিক্রম ঘটায়।

ত্রুটি দেয়:

public CustomerWrapper(CustomerDto customer = null){...}

কাজ করে:

public CustomerWrapper(CustomerDto customer){...}
public CustomerWrapper():this(null){}

0

আপনার কন্ট্রোলারে সম্ভবত প্যারামিটারাইজড কনস্ট্রাক্টর থাকতে পারে এবং আপনি যে কোনও নির্ভরতা রিললভার ব্যবহার করছেন তা নির্ভরতা সঠিকভাবে সমাধান করতে সক্ষম নয়। আপনাকে ব্রেক-পয়েন্ট স্থাপন করতে হবে যেখানে নির্ভরতা সমাধানের পদ্ধতিটি লেখা হয় এবং আপনি অভ্যন্তরীণ ব্যতিক্রমটিতে সঠিক ত্রুটি পাবেন।


0

আমারও একই সমস্যা ছিল।

শুধু সরানো হয়েছে HttpFileCollectionBase filesপোস্ট অ্যাকশন পদ্ধতি যুক্তি থেকে এবং মত যোগ HttpFileCollectionBase files = Request.Files;পদ্ধতি দেহে।


0

আমি DOMAIN ফোল্ডারের অভ্যন্তরে মডেলটিতে একটি প্যারামিটারলেস কনস্ট্রাক্টর যুক্ত করেছি এবং সমস্যাটি সমাধান হয়ে গেছে।

এখানে চিত্র বর্ণনা লিখুন

 public User()
        {

        }

-3

একটি এজ্যাক্স কল করার সময় আমি সেই বার্তাটি আগেই পেয়েছি। সুতরাং এটির জন্য যা মূলত জিজ্ঞাসা করা হচ্ছে সেই মডেল বর্গের একজন কনস্ট্রাক্টর যা কনটোলার দ্বারা ডাকা হচ্ছে, কোনও প্যারামিটার নেই।

এখানে একটি উদাহরণ

public class MyClass{

     public MyClass(){} // so here would be your parameterless constructor

 }

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