Java týden
30 % bodů zdarma na online výuku díky naší Slevové akci!
Pouze tento týden sleva až 80 % na e-learning týkající se Javy.
Avatar
Martin Zbirovský:6.11.2019 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.11.2019 15:39
Avatar
Jaroslav Smrž
Redaktor
Avatar
Odpovídá na Martin Zbirovský
Jaroslav Smrž:6.11.2019 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.11.2019 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.11.2019 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.11.2019 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.