2015-08-06 9 views
7

Tôi tạo ra một quan điểm cho rằng đang làm việc thành công với 1 cái nhìnthêm 2 mô hình IEnumerable trong 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> 
} 

Với điều khiển

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"); 
     } 
    } 
} 

Tuy nhiên tôi muốn thêm một đoạn như thế này trên cùng một trang, nhưng với một đường dẫn nội dung khác.

Làm cách nào để thêm một mô hình khác vào trang này?

Tôi chỉ có một bộ điều khiển và View, vì vậy tôi đã tạo ra một ViewModel tạo 2 lớp

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> 
    } 
} 

Khi tôi cố gắng chuyển thông tin này vào quan điểm của tôi như @model IEnumerable<plantationmvc.Models.CommModel> nó nói nó không tồn tại trong không gian tên.

+2

Điều đó không thể biên dịch. Mã * thực * của bạn là gì? – Amit

+0

@Amit được thêm vào trong giao diện điều khiển; đoạn mã mô hình là những gì tôi đã làm để thử thêm mô hình thứ 2 vào và chỉnh sửa mô hình 'IEnumerable '. – teachtyler

Trả lời

7
{ 
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 
} 

} 

Và thêm quan điểm @model plantationmvc.Models.ArchivesViewModel

+0

Tôi có thêm 'Public ActionResult Index()' 'var' vào bên trong các thuộc tính CommModel như thể nó là một bộ điều khiển khác không? và 'return (View)' – teachtyler

+0

bạn chỉ nên thêm dữ liệu được yêu cầu trên chế độ xem chỉ mục cho chế độ xemModel – MstfAsan

+0

Đã bận nhưng quay lại nhìn vào điều này, tôi sẽ thực hiện những thay đổi nào đối với bộ điều khiển? Tôi có chuyển dữ liệu cần thiết trên bộ điều khiển sang mô hình không? – teachtyler

2

Bạn cần bất kỳ loại cho mô hình của bạn trong đó có hai bộ sưu tập trong đó.

Đây có thể là loại của bạn (ví dụ: ArchivesViewModel từ câu trả lời ở trên) hoặc thậm chí bạn có thể sử dụng Tuple<T1, T2>.

Controler:

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); 
} 

Xem 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> 
} 
+0

Trong khi 'Tuple' chắc chắn sẽ hoạt động , cá nhân tôi tìm thấy 'Item1',' Item2', 'ItemX' để ít hơn hữu ích khi nó đến thời gian cho người tiêu dùng của tuple để thực sự sử dụng nó. –

+0

Đồng ý. Nó ít dễ đọc hơn. Nhưng đôi khi nó làm phiền rằng trong C# bạn phải tạo các kiểu cho mọi công việc đơn giản. Vì vậy, 'Tuple',' Action', 'Func' là ví dụ tốt khi bạn có thể sử dụng các kiểu .NET và không phải tạo các kiểu của riêng bạn. –

+0

Tôi không chắc mình đang làm gì sai. Làm thế nào để thêm từng bộ 'var' vào bộ điều khiển. Tôi cần để có được xem để trở về (tập tin), nhưng cả hai tập hợp các tập tin. – teachtyler

Các vấn đề liên quan