Předvánoční slevová akce PHP týden
Pouze tento týden sleva až 80 % na PHP e-learning!
Využij předvánočních slev a získej od nás 20 % bodů zdarma! Více zde

Diskuze: ASP NET core dropdownlist NullReferenceException

Aktivity (4)
Avatar
Martin Zbirovský:6. listopadu 15:39

Zdravím, snažím se vytvořit jednoduchý dropdownlist u kterého si před vytvořeni filmu zvolím v jaké zemi byl vytvořen. Pokud ale otevřu view s formulářem kde vyvařím film dostanu chybovou hlášku:
"NullReference­Exception: Object reference not set to an instance of an object."

Bohužel s asp net core začínám a nevím jak tento problém řešit.

V modelu Movie je

public class Movie
    {
        public int Id { get; set; }

        [StringLength(60, MinimumLength = 3)]
        [Required]
        public string Title { get; set; }

        [Display(Name = "Release Date")]
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        public DateTime ReleaseDate { get; set; }

        public string Country { get; set; }
        [NotMapped]
        public List<SelectListItem> Countries { get; } = new List<SelectListItem>
        {
            new SelectListItem { Value = "MX", Text = "Mexico" , Selected = true},
            new SelectListItem { Value = "CA", Text = "Canada" },
            new SelectListItem { Value = "US", Text = "USA"  },
        };
    }

**Controller obsahuje **

public IActionResult Create() {
    return View();}

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,Title,ReleaseDate,Genre,Price,Rating,Country")] Movie movie){
    if (ModelState.IsValid)
    {
        _context.Add(movie);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }
    return View(movie);
}

View Create

<form asp-action="Create">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="form-group">
        <label asp-for="Title" class="control-label"></label>
        <input asp-for="Title" class="form-control" />
        <span asp-validation-for="Title" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="ReleaseDate" class="control-label"></label>
        <input asp-for="ReleaseDate" class="form-control" />
        <span asp-validation-for="ReleaseDate" class="text-danger"></span>
    </div>
    <div>
        <select asp-for="Country" asp-items="Model.Countries"></select>
    </div>
    <div class="form-group">
        <input type="submit" value="Create" class="btn btn-primary" />
    </div>
</form>

CRUD u filmu funguje na 100% ale pokud přidám dropdownlist vždy dojdu ke stejné chybě na řádku kde je: <select asp-for="Country" asp-items="Model.Cou­ntries"></selec­t>

Za jakékoliv odpovědi diky

Chci docílit: Při vloženi nového filmu chci zvolit stát kde byl vytvořen a uložit jej do databáze.

 
Odpovědět
6. listopadu 15:39
Avatar
Jaroslav Smrž
Redaktor
Avatar
Odpovídá na Martin Zbirovský
Jaroslav Smrž:6. listopadu 17:37

Na Countries bys měl mít správně další model. V tomto jednoduchém případě, kde máš 3 volby to je jednodušší udělat přímo ve view a ve třídě mít třeba jen public string Country. Ve view pak budeš mít select list. např takto:

<div class="form-group">
        <label asp-for="Country" class="control-label">Country</label>
        <select class="custom-select mr-sm-2" id="Country" asp-for="Country">
                <option selected value="CA">California</option>
                <option value="TX">Texas</option>
                <option value="NY">New York</option>
        </select>
        <span asp-validation-for="Country" class="text-danger"></span>
</div>
Nahoru Odpovědět
6. listopadu 17:37
/* Life runs on code */
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Jaroslav Smrž
Martin Zbirovský:6. listopadu 18:15

Díky moc už žádná chyba jen to vrací null ale to už hádám zvládnu a zkusím to dát do samostatné třídy

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
6. listopadu 18:15
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.