Я сидит с моим окончательным проектом в школе, но имею некоторые проблемы с его завершением.Добавление информации с использованием DbContext - ASP.NET MVC
Прежде всего, я создал веб-магазин с помощью следующих tutorial. Это учебник, основанный на MVC 3, но я сделал его для новой версии.
Впоследствии я хотел создать какую-то базу данных для блога, основанную на тех же принципах, и именно здесь у меня проблемы.
Я сделал статью в качестве модели:
public class Article
{
[Key]
public int ArticleId { get; set; }
public int SubjectId { get; set; }
public string Title { get; set; }
public string MainText { get; set; }
public string PictureURL { get; set; }
public ArticleSubject ArticleSubject { get; set; }
}
Затем я создал ArticleSubject:
public class ArticleSubject
{
[Key]
public int SubjectId { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public List<Article> Articles { get; set; }
}
Затем я создал NewsEntities DbContext:
public class NewsEntities : DbContext
{
public DbSet<Article> Articles { get; set; }
public DbSet<ArticleSubject> ArticleSubjects { get; set; }
}
Наконец я наполненную следуя за классом «NewsData»:
public class NewsData : DropCreateDatabaseIfModelChanges<NewsEntities>
{
protected override void Seed(NewsEntities context)
{
var articleSubjects = new List<ArticleSubject>
{
new ArticleSubject { Title = "Almindelige Nyheder" },
new ArticleSubject { Title = "Arrangementer" },
new ArticleSubject { Title = "Udstillinger" }
};
}
}
Затем я создал NewsManagerController, используя Entity Framework. Когда я запускаю свое приложение и создаю новые статьи, выпадающее поле Subject пусто. Я всю ночь искал решение без везения.
Надеюсь, вы можете мне помочь! Не стесняйтесь запрашивать дополнительные фрагменты кода или информацию.
Спасибо!
// refnedergaard
EDIT:
Контроллер:
public class NewsManagerController : Controller
{
private NewsEntities db = new NewsEntities();
// GET: NewsManager
public ActionResult Index()
{
var articles = db.Articles.Include(a => a.ArticleSubject);
return View(articles.ToList());
}
// GET: NewsManager/Details/5
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Article article = db.Articles.Find(id);
if (article == null)
{
return HttpNotFound();
}
return View(article);
}
// GET: NewsManager/Create
public ActionResult Create()
{
ViewBag.SubjectId = new SelectList(db.ArticleSubjects, "SubjectId", "Title");
return View();
}
// POST: NewsManager/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ArticleId,SubjectId,Title,MainText,PictureURL")] Article article)
{
if (ModelState.IsValid)
{
db.Articles.Add(article);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.SubjectId = new SelectList(db.ArticleSubjects, "SubjectId", "Title", article.SubjectId);
return View(article);
}
// GET: NewsManager/Edit/5
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Article article = db.Articles.Find(id);
if (article == null)
{
return HttpNotFound();
}
ViewBag.SubjectId = new SelectList(db.ArticleSubjects, "SubjectId", "Title", article.SubjectId);
return View(article);
}
// POST: NewsManager/Edit/5
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "ArticleId,SubjectId,Title,MainText,PictureURL")] Article article)
{
if (ModelState.IsValid)
{
db.Entry(article).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.SubjectId = new SelectList(db.ArticleSubjects, "SubjectId", "Title", article.SubjectId);
return View(article);
}
// GET: NewsManager/Delete/5
public ActionResult Delete(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Article article = db.Articles.Find(id);
if (article == null)
{
return HttpNotFound();
}
return View(article);
}
// POST: NewsManager/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
Article article = db.Articles.Find(id);
db.Articles.Remove(article);
db.SaveChanges();
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
}
Создание вида:
@model boerglumklosterdk.Models.Article
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Article</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.SubjectId, "SubjectId", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("SubjectId", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.SubjectId, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Title, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.MainText, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.MainText, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.MainText, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.PictureURL, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.PictureURL, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.PictureURL, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
показать нам соответствующий метод действия и просмотр кода для формы создания – Shyju
Что _Subject-dropdown_ вас необходимо показать соответствующий код (контроллер и представление) –
Я добавил контроллер и создаю представление к сообщению. Спасибо за вашу помощь, оцените! – refnedergaard