внешний ключ не заполнен MVC3 - PullRequest
0 голосов
/ 27 марта 2012

Привет, люди. У меня есть следующий код:

public ActionResult Create(GameTBL gametbl)
        {
            if (ModelState.IsValid)
            {
                //First you get the gamer, from GamerTBLs
                var gamer = db.GamerTBLs.Where(k => k.UserName == User.Identity.Name).SingleOrDefault();
                //Then you add the game to the games collection from gamers
                gamer.GameTBLs.Add(gametbl);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
        }

Это дает мне следующую ошибку:

Error   1   'MvcApplication1.Controllers.GameController.Create(MvcApplication1.Models.GameTBL)': not all code paths return a value

То, что этот код пытается сделать, пытается заполнить чужойКлюч игрока в игровой стол

Модель для моего контроллера Геймер:

    public string UserName { get; set; }
    public int GamerID { get; set; }
    public string Fname { get; set; }
    public string Lname { get; set; }
    public string DOB { get; set; }
    public string BIO { get; set; } 

Модель для моего игрового контроллера:

    public int GameID { get; set; }
    public string GameName { get; set; }
    public string ReleaseYear { get; set; }
    public string Cost { get; set; }
    public string Discription { get; set; }
    public string DownloadableContent { get; set; }
    public string Image { get; set; }
    public string ConsoleName { get; set; }
    public int GamerIDFK { get; set; }
    public byte[] UserName { get; set; }

Ответы [ 3 ]

3 голосов
/ 27 марта 2012

Вам просто нужно вернуть представление, когда ваш ModelState недействителен.

public ActionResult Create(GameTBL gametbl)
    {
        if (ModelState.IsValid)
        {
            //First you get the gamer, from GamerTBLs
            var gamer = db.GamerTBLs.Where(k => k.UserName == User.Identity.Name).SingleOrDefault();
            //Then you add the game to the games collection from gamers
            gamer.GameTBLs.Add(gametbl);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(gametbl);
    }

Это заставит страницу показать все ошибки при создании модели (при условии, что у вас есть проверка).

0 голосов
/ 27 марта 2012

Как вы знаете, ошибка на самом деле не связана с ASP.Net MVC - она ​​будет ошибкой в ​​любом методе, который возвращает значение.

Сообщение об ошибке not all code paths return a value означает только это - тампуть в коде, который не возвращает значение, когда сигнатура метода говорит, что оно должно.

В вашем случае ваш метод действия имеет сигнатуру ActionResult Create(GameTBL gametbl), поэтому все пути через метод должнывернуть ActionResult.В вашем коде путь, который происходит, когда ModelState.IsValid имеет значение true, возвращает ActionResult, но ничего не возвращается на пути, где ModelState.IsValid равно false.

В других ответах приведены примеры того, как исправить свой код, возвращая ActionResult по пути 'ModelState.IsValid is false'.

0 голосов
/ 27 марта 2012

попробуйте это ... оператор возврата должен быть за пределами оператора if ... проблема в том, что вы не возвращаете результат представления / действия, когда состояние модели недопустимо ...

public ActionResult Create(GameTBL gametbl)
    {
        if (ModelState.IsValid)
        {
            //First you get the gamer, from GamerTBLs
            var gamer = db.GamerTBLs.Where(k => k.UserName == User.Identity.Name).SingleOrDefault();
            //Then you add the game to the games collection from gamers
            gamer.GameTBLs.Add(gametbl);
            db.SaveChanges(); 
            return RedirectToAction("Index");               
        }
        return View(gametbl);
    }
...