поэтому я работаю в проекте asp.net mvc 4, и у меня есть проблема, на мой взгляд, то, что я хочу, это создать представление с 2 разными типами моделей, первый вид (индекс) принимает IEnumerable (Models.myModel) второй (абонентская подробности) принять Models.myModel, это мой код модели:Как создать представление с несколькими моделями mvc 4?
public class SubscribersModel
{
[Required]
[DataType(DataType.Text)]
public string name { get; set; }
[Required]
[DataType(DataType.Text)]
[StringLength(maximumLength: 10, MinimumLength = 7)]
public string cin { get; set; }
[Required]
[DataType(DataType.Date)]
public DateTime birthday { get; set; }
[DataType(DataType.Text)]
public string birthplace { get; set; }
}
Мой код контроллера:
public class SubscribersController : Controller
{
private AgencyDbEntities dbcontext = new AgencyDbEntities();
private Subscribe sb = new Subscribe();
public ActionResult Index()
{
var subscribers = from sb in dbcontext.Subscribes select new SubscribersModel { cin = sb.cin, name = sb.name, birthday = (DateTime)sb.birthDay, birthplace = sb.birthPlace };
return View(subscribers);
}
public ActionResult Details(string id,string cin,string name)
{
var subscriber = new SubscribersModel();
IEnumerable<Subscribe> list = from s in dbcontext.Subscribes select s;
foreach (var sb in list)
{
if (sb.cin == id)
{
subscriber.cin = sb.cin;
subscriber.name = sb.name;
subscriber.birthday = (DateTime)sb.birthDay;
subscriber.birthplace = sb.birthPlace;
}
}
return View(subscriber);
}
}
мой взгляд индекс:
@model IEnumerable<_3SDWebProject.Models.SubscribersModel>
@{
ViewBag.Title = "Subscribers";
}
<div class="sidebar">
//here i want to show my details view
</div>
<div class="content" style="width: 700px; margin-left: 250px; height: 545px;margin- top: -30px;">
<h2>Subscribers</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
@Styles.Render("~/Content/css")
<script src="@Url.Content("~/Scripts/Table.js")" type="text/javascript"></script>
<table class="altrowstable" id="alternatecolor">
<tr>
<th>
CIN
</th>
<th>
Name
</th>
<th>
birthday
</th>
<th>
birthplace
</th>
<th class="operations">
Operations
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.cin)
</td>
<td>
@Html.DisplayFor(modelItem => item.name)
</td>
<td>
@Html.DisplayFor(modelItem => item.birthday)
</td>
<td>
@Html.DisplayFor(modelItem => item.birthplace)
</td>
<td>
@Html.ActionLink("Details", "Details", new { id = item.cin }, new { @class = "details-logo"})
</td>
</tr>
}
</table>
</div>
мои детали просмотра:
@model _3SDWebProject.Models.SubscribersModel
<fieldset>
<legend>SubscribersModel</legend>
<div class="display-label">
@Html.DisplayNameFor(model => model.name)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.name)
</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.birthday)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.birthday)
</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.birthplace)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.birthplace)
</div>
</fieldset>
так, пожалуйста, если кто-то есть какие-либо идеи или решения, я буду очень признателен: NB: это картина описать то, что я хочу
Вид должен быть связан только с одной моделью. Вы можете объединить обе модели в одну и использовать эту комбинированную модель в представлении. – Flavia
Я бы не согласился с этим. Взгляд может очень хорошо, а иногда и должен быть связан с таким количеством моделей, сколько необходимо. Вот почему я использую то, что я называю «View Model» (даже если это не совсем правильно), класс между моделями и представлением, чтобы создать правильное в структуре памяти, которое будет передано в представление. Но это никак нельзя назвать «моделью». Помните, что если вы используете EF Code First, создание новой «комбинированной» модели фактически приведет к созданию новой таблицы в вашей базе данных. Я сомневаюсь, что это цель .... – BernardG