добавление 2 моделей IEnumerable в 1 представлении
Я создал представление, которое успешно работало с 1 view
@model IEnumerable<string>
<ul>
@foreach (var fName in Model)
{
var name = fName;
var link = @Url.Content("~/Content/archives/mgamm/") + name.Replace(" ", "%20");
<li style="list-style:none; font-size:1.2em;">
<a href="@link">@name</a>
</li>
}
</ul>
@if (User.IsInRole("admin"))
{
<div>
@using (Html.BeginForm("Index", "Archives", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="File" name="file" id="file" value="Choose File" />
<button type="submit">Upload</button>
}
</div>
}
контроллер
namespace plantationmvc.Controllers
{
public class ArchivesController : Controller
{
//
// GET: /Archives/
public ActionResult Index()
{
var path = Server.MapPath("~/Content/archives/mgamm");
var dir = new DirectoryInfo(path);
var files = dir.EnumerateFiles().Select(f => f.Name);
return View(files);
}
[HttpPost]
public ActionResult Index(HttpPostedFileBase file)
{
var path = Path.Combine(Server.MapPath("~/Content/archives/mgamm"), file.FileName);
var data = new byte[file.ContentLength];
file.InputStream.Read(data, 0, file.ContentLength);
using (var sw = new FileStream(path, FileMode.Create))
{
sw.Write(data, 0, data.Length);
}
return RedirectToAction("Index");
}
}
}
однако я хотел добавить еще один фрагмент, как это на той же странице, но с другой путь к содержимому.
как добавить другую модель на эту страницу?
у меня просто был контроллер и вид, поэтому я создал ViewModel, создав 2 класса
namespace plantationmvc.Models
{
public class ArchivesViewModel
{
public CommModel Model1 { get; set; }
public MeetModel Model2 { get; set; }
}
public class CommModel
{
public IEnumerable<CommModel>
}
public class MeetModel
{
public IEnumerable<MeetModel>
}
}
когда я пытаюсь передать это в мое представление как @model IEnumerable<plantationmvc.Models.CommModel>
Он говорит, что не существует в пространстве имен.
2 ответов
{
public class ArchivesViewModel
{
public IEnumerable<CommModel> Model1 { get; set; }
public IEnumerable<MeetModel> Model2 { get; set; }
}
public class CommModel
{
//properties of CommModel
}
public class MeetModel
{
//properties of Meet Model
}
}
и добавить вид @model plantationmvc.Models.ArchivesViewModel
вам нужен любой тип для вашей модели, в которой есть две коллекции.
Это может быть либо типа (например,ArchivesViewModel
из ответа выше) или вы можете даже использовать Tuple<T1, T2>
.
контроллер:
public ActionResult Index()
{
var list1 = new[] { "1", "2", "3", "4", "5" };
var list2 = new[] { "10", "20", "30", "40", "50" };
var model = Tuple.Create<IEnumerable<string>, IEnumerable<string>>(list1, list2);
return View(model);
}
посмотреть Index.schtml
:
@model Tuple<IEnumerable<string>, IEnumerable<string>>
@foreach (var a in Model.Item1)
{
<h2>@a</h2>
}
@foreach (var b in Model.Item2)
{
<h3>@b</h3>
}