Mvc, No parameterless constructor defined for this object.

Permalänk
Medlem

Mvc, No parameterless constructor defined for this object.

Har problem att createa, använder mig utav EF.

using System.Collections.Generic; namespace test.Models { public class CreateViewModel { public CreateViewModel(Ball ball, IEnumerable<Method> methods) { Ball = ball; Methods = methods; } public Ball ball { get; private set; } public IEnumerable<Method> Methods { get; private set; } } }

I min view har jag:
@using System.Collections
@model test.Models.CreateViewModel

Permalänk
Medlem

Felmeddelandet låter som att du skapar ett object via New createviewmodel() men du har ingen public createviewmodel() {}

Skickades från m.sweclockers.com

Permalänk
Medlem

Den går inte ens till min controller. Så behöver väl en constructor som det står. Men hur vart?

Permalänk
Medlem

Hmm, det kan vara ett annat fel nu också såg jag.

i construktorn har du:
Ball = ball;

Detta är fel, du ska ha följande istället:
this.ball = ball;

Permalänk
Medlem

Nej det behövs inte, this blir "redundant".

Permalänk
Medlem

För min create view. Den körs utan problem.

public ActionResult Create() { var methods = db.Methods.ToList(); var ball = new Ball(); var createViewModel = new CreateViewModel(ball, methods); return View(createViewModel); }

Permalänk
Medlem
Skrivet av MB:

Nej det behövs inte, this blir "redundant".

han hade Ball (stort B) vilket pekar mot klassen och inte objektet. Det stämmer, men det är svårtydligt när man har flera objekt med samma namn.

Skickades från m.sweclockers.com

Permalänk
Medlem

Lägg till en tom konstruktor i klassen, dvs

using System.Collections.Generic; namespace test.Models { public class CreateViewModel { public CreateViewModel(Ball ball, IEnumerable<Method> methods) { Ball = ball; Methods = methods; } public CreateViewModel() { } public Ball ball { get; private set; } public IEnumerable<Method> Methods { get; private set; } } }

Problemet du har är exakt den samma som du får i felmeddelandet, När din kontroller försöker ta imot objektet här så använder den sig av en tom konstruktor, den kräver det ( dvs felmedelandet du får )

Personligen hade jag totalt skippat den konstruktorn du har där, då den inte har någon logik alls, och det är inte vidare svårare att skapa upp objektet med new CreateViewModel() { Ball = ball, Methods = methods ];

I alla fall, ta bort konstructorn eller lägg till en tom.

Visa signatur

Speldator: i7-8700k, 32GB DDR4, RTX2080
Server 1: SB 2500k, MZI -P67GD55, 32GB DDR3, Corsair MX 240GB SSD
Surface Pro 2017, Konsoler: Typ alla, Oculus Rift

Permalänk
Medlem

Det jag inte riktigt förstår med MVC jämnfört med webforms är i code behinden i webforms sätts tex klassen med lblTest.Text = klassen.property
Men vart sker det i MVC? vyn så ser det ut så här när man låter mvc skapa vyerna åt en:

<div class="editor-field"> @Html.EditorFor(model => model.Name) @Html.ValidationMessageFor(model => model.Name) </div> <div class="editor-label"> @Html.LabelFor(model => model.Information) </div> <div class="editor-field"> @Html.EditorFor(model => model.Information) @Html.ValidationMessageFor(model => model.Information) </div>

När man sätter datan till klassen som man skickas till:
[HttpPost]
public ActionResult Create(CreateViewModel createViewModel)
sker det då genom "@Html.EditorFor(model => model.Name)" eller vart är det steget om man jämnför med det exemplet som jag skrev ovan om webforms?

För med er hjälp med att lägga till en tom konstruktor

public CreateViewModel() { }

Så kommer jag till [HttpPost] läger fast min CreateViewModel har 2 st tomma klasser i sig.