Здравствуйте.
Есть 2 таблицы SepticTank
и Discount
.
Как передать все данные в контроллер и представление при связи многие-ко-многим, если на некоторых моделях есть скидка, а на других нет?
вот пример кода:
Модель SepticTank.cs
public class SepticTank
{
[Display(Name = "Наименование модели")]
public int Id { get; set; }
[Display(Name = "Модель")]
public string Model { get; set; }
[Range(0, 20000000, ErrorMessage = "Недопустимая цена")]
[Display(Name = "1 компрессор")]
public int Cost1Comp { get; set; } //Цена с 1 компрессором
[Range(0, 20000000, ErrorMessage = "Недопустимая цена")]
[Display(Name = "2 компресора")]
public int Cost2Comp { get; set; } //Цена с 2 компрессорами
[Range(1, 1000, ErrorMessage = "Недопустимое количество пользователей")]
[Display(Name = "Количество пользователей")]
public int CountUsers { get; set; }
[Range(0, 500, ErrorMessage = "Недопустимый дневной приток")]
[Display(Name = "Максимальный дневной приток")]
public double InflowDrain { get; set; } //Максимальный дневной приток
[Range(0, 300, ErrorMessage = "Недопустимая число использования электроэнергии")]
[Display(Name = "Энергия")]
public double Energy { get; set; }
[Range(1, 200, ErrorMessage = "Недопустимая длина")]
[Display(Name = "Длина")]
public double Lenght { get; set; }
[Range(1, 200, ErrorMessage = "Недопустимая ширина")]
[Display(Name = "Ширина")]
public double Weight { get; set; }
[Range(1, 200, ErrorMessage = "Недопустимая высота")]
[Display(Name = "Высота")]
public double Height { get; set; }
public virtual ICollection<Discount> Discounts { get; set; }
public SepticTank()
{
Discounts = new List<Discount>();
}
Модель Discount.cs:
public class Discount
{
public int Id { get; set; }
[Display(Name = "Дата начала акции")]
public DateTime DateBegin { get; set; }
[Display(Name = "Дата окончания акции")]
public DateTime DateEnd { get; set; }
[Range(0, 100, ErrorMessage = "Недопустимый процент")]
[Display(Name = "Процент скидки")]
public int Percent { get; set; }
public virtual ICollection<SepticTank> SepticTanks { get; set; }
public Discount()
{
SepticTanks = new List<SepticTank>();
}
}
Модель SepticTankContext.cs
public class SepticTankContext : DbContext
{
public SepticTankContext() : base("DefaultConnection")
{ }
public DbSet<SepticTank> SepticTanks { get; set; }
public DbSet<Discount> Discounts { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Discount>().HasMany(c => c.SepticTanks)
.WithMany(s => s.Discounts)
.Map(t => t.MapLeftKey("DiscountId")
.MapRightKey("SepticTankId")
.ToTable("DiscountSepticTank"));
}
}
UPD:
В проекте можно вывести все данные, но на странице будут показываться только те записи из первой таблицы, которые уже связаны со второй
вот пример действия в контроллере
public ActionResult Models()
{
SepticTank Sept = db.SepticTanks.Find();
ViewBag.Discounts = db.Discounts.ToList();
return View(Sept);
}
а также вот примерное представление Models.cshtml
@using ProjectTopas_v_1._2.Models
@model SepticTank
@{
ViewBag.Title = "Модельный ряд";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="row">
<table class="table table-bordered table-hover">
<thead>
<tr>
<th rowspan="2">Модель</th>
<th colspan="2" style="text-align:center"><p>Цена, руб.</p></th>
<th rowspan="2">Количество <br />пользователей, чел.</th>
<th rowspan="2">Максимально дневной<br /> приток, м<sup>3</sup>/сутки</th>
<th rowspan="2">Энергия,<br />Квт/сутки</th>
<th colspan="3" style="text-align:center">Габаритные размеры</th>
</tr>
<tr>
<th>1 компрессор</th>
<th>2 компрессора</th>
<th>Длина, м</th>
<th>Ширина, м</th>
<th>Высота, м</th>
</tr>
</thead>
<tbody>
@foreach (var b in Model.Discounts)
{
<tr>
<td style="text-align:center"><a href="/Home/Details/@Model.Id">@Model.Model</a></td>
<td style="text-align:center">
<p>
@if (Model.Cost1Comp == 0)
{ }
else
{
double d = Math.Round(Model.Cost1Comp * (1 - ((double)b.Percent / 100)));
<small><s style="color:gray">@Html.DisplayFor(model => model.Cost1Comp)</s></small>
<p style="color:red">@d (-@b.Percent %)</p>
}
</td>
<td style="text-align:center">
<p>
@if (Model.Cost2Comp == 0)
{ }
else
{
double d = Math.Round(Model.Cost2Comp * (1 - ((double)b.Percent / 100)));
<small><s style="color:gray">@Html.DisplayFor(model => model.Cost2Comp)</s></small>
<p style="color:red">@d (-@b.Percent %)</p>
}
</td>
<td style="text-align:center"><p>@Model.CountUsers</p></td>
<td style="text-align:center"><p>@Model.InflowDrain</p></td>
<td style="text-align:center"><p>@Model.Energy</p></td>
<td style="text-align:center"><p>@Model.Lenght</p></td>
<td style="text-align:center"><p>@Model.Weight</p></td>
<td style="text-align:center"><p>@Model.Height</p></td>
</tr>
}
</tbody>
</table>
<br />
</div>
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я написал приложение на языке C#, которое работает с базой данных MS SQLЕсли я переношу приложение на другой компьютер и пытаюсь запустить то оно...
Не могли бы вы,пожалуйста,создать корректно эту программу(по-своему,скорее всего,потому что я еще зеленый и пишу лапшу), чтобы я смог сравнить...
Перестал открываться проект Unity/С#, после установки поддержки C++ проектов(До этого все работало) Решение вроде открывается, в самом проекте...
На форме(Windows Forms) есть flowLayoutPanel в который динамически добавляются разные элементыAutoScroll = true