私は今MVC 3(コードファースト)を学んでいます.asp.netの素晴らしいチュートリアルとstackoverflowに関するいくつかの質問のおかげで多くのことを学びましたが、何かを理解することはできません. デフォルト値を設定しようとしています。誰かが質問をするとき、その質問のステータスはデフォルトで 3 (= 未回答) でなければなりません。この投稿のおかげで、なんとか設定できました:asp.net mvcビューモデルのデフォルト値 ですが、今は多対多の関係に対して同じことをしようとしています。(QuestionModel public virtual ICollection カテゴリ内)
誰かがこれについて私を助けることができますか?
これは私の QuestionModel (Question.cs) です。
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace MvcDatabase.Models
{
public class Question
{
[Key]
public int QuestionID { get; set; }
[DisplayFormat(DataFormatString="{0:d}", ApplyFormatInEditMode=true)]
[Display(Name="Datum")]
public DateTime Date { get; set; }
[Required(ErrorMessage="Naam is een verplicht veld.")]
[MaxLength(100, ErrorMessage="Naam kan maximum 100 karakters bevatten")]
[Display(Name="Naam")]
public string Author { get; set; }
[Required(ErrorMessage="E-mail is een verplicht veld.")]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email")]
public string MailAuthor { get; set; }
[Required(ErrorMessage="Onderwerp is een verplicht veld.")]
[MaxLength(100, ErrorMessage="Onderwerp kan maximum 100 karakters bevatten.")]
[Display(Name="Onderwerp")]
public string Title { get; set; }
[Required(ErrorMessage="Bericht is een verplicht veld.")]
[Display(Name="Bericht")]
public string Message { get; set; }
public virtual ICollection<Category> Categories { get; set; }
public virtual ICollection<Reaction> Reactions { get; set; }
[ForeignKey("Status")]
public int StatusID { get; set; }
public virtual Status Status { get; set; }
public Question()
{
StatusID = 3;
}
}
}
これは、CategoryModel (Category.cs) です。
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace MvcDatabase.Models
{
public class Category
{
[Key]
public int CategoryID { get; set; }
[Required(ErrorMessage="Omschrijving is een verplicht veld.")]
[MaxLength(100, ErrorMessage = "Omschrijving kan maximum 100 karakters bevatten.")]
[Display(Name="Categorie omschrijving")]
public string Description { get; set; }
public virtual ICollection<Question> Questions { get; set; }
}
}
これが DbContextModel (TestotheekDBContext.cs) です。
using System.Data.Entity;
namespace MvcDatabase.Models
{
public class TestotheekDBContext: DbContext
{
public DbSet<Status> Statuses { get; set; }
public DbSet<Category> Categories { get; set; }
public DbSet<Question> Questions { get; set; }
public DbSet<Employee> Employees { get; set; }
public DbSet<Reaction> Reactions { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Question>()
.HasMany(qc => qc.Categories)
.WithMany(cq => cq.Questions)
.Map(m => m.MapLeftKey("QuestionID")
.MapRightKey("CategoryID")
.ToTable("QuestionsWithCategory"));
}
}
}
コントローラーでコードが必要な場合
public ActionResult Create()
{
return View(new Question());
}
//
// POST: /Default4/Create
[HttpPost]
public ActionResult Create(Question question)
{
var vraag = new Question();
vraag.Date = DateTime.Now;
vraag.Author = question.Author;
vraag.MailAuthor = question.MailAuthor;
vraag.Title = question.Title;
vraag.Message = question.Message;
if(ModelState.IsValid)
{
db.Questions.Add(vraag);
db.SaveChanges();
return RedirectToAction("Index","Home");
}
return View(question);
}
(戻り RedirectToAction をテストしていません)
編集
これは私が現在得ている結果です:
最初のセクション (最初のテーブル) の最後の質問でわかるように、カテゴリはありません (フィールドは空です) これは、そのテーブルの他のすべての質問と同じでなければなりません。管理者が 1 つ (または複数) を割り当てる必要があるためです。