У меня есть настольные доски (но см. Вместо этого как пост). Для каждой должности/доски я хочу добавить возможность проголосовать и создал таблицу голосов. Каждый пост может иметь избирательный номер (например, 5), и каждое голосование принадлежит почте. Я вижу это, так как это должно быть отношение «один к одному». Правильно?Сохранить внешний ключ в базе данных?
Это мои модели
public class Board
{
[Key]
public int MessageId { get; set; }
public String Message { get; set; }
[Required]
public Vote Vote { get; set; }
}
public class Vote
{
[Key]
public int? VoteId { get; set; }
public int? Votes { get; set; }
public Board Board { get; set; }
}
Когда I'am пытается создать новый пост ModelState.IsValid
ложна и ошибок нет, и не может понять, почему, когда я отладки.
Это я мой контроллер
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "messageId,message,VoteId,Votes")] Board board)
{
if (ModelState.IsValid)
{
db.Boards.Add(board);
db.SaveChanges();
return RedirectToAction("Index");
}
return RedirectToAction("Index");
}
Я думаю, что это должно быть хорошо, потому что я принимаю null
за голоса в моей модели.
Я вручную добавил некоторые данные в обе таблицы, и я получаю результат на веб-странице с кодом, но я не могу создать новые сообщения.
Показать сообщения/Доски
// GET: Boards
public ActionResult Index()
{
var data = db.Boards.Include("Vote").ToList();
return View(data);
}
И вид.
@model IEnumerable<Klotterplank.Models.Board>
@foreach (var item in Model)
{
<ul>
<li class="board-blocks">@Html.DisplayFor(modelItem => item.Message)</li>
<li class="board-blocks">@Html.DisplayFor(modelItem => item.Vote.Votes)</li>
</ul>
}
может каждый пост действительно есть только один голос? Или вы имеете в виду, что каждый пользователь может голосовать только за каждый пост? – ADyson
Результат должен быть таким, как это голосование здесь, в stackoverflow. Один пост, две стрелки и номер. Одна должность имеет один голос, и каждый пользователь может голосовать только один раз на каждом посту. Думаю, мне нужно добавить UserID. – Xtreme
, поэтому есть несколько голосов за сообщение, по одному на каждого пользователя. Тогда _ в UI_ - это то, что показывает общее количество голосов за сообщение. Лично я бы не сохранил эту сумму в базе данных - в реляционных терминах она избыточна, потому что вы можете рассчитать ее на основе отдельных данных голосования (которые вам нужны, чтобы связать голоса с пользователями и остановить их голосование дважды, или обновить если они меняют/снимают свой голос). – ADyson