2015-08-06 6 views
7

मैं एक राय यह है कि 11 दृश्य में 2 IEnumerable मॉडल जोड़ने

@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

कि संकलन नहीं कर सकते। आपका * असली * कोड क्या है? – Amit

+0

@ प्रवेश नियंत्रक दृश्य में जोड़ा गया; मॉडल स्निपेट वह है जो मैंने दूसरे मॉडल को जोड़ने और 'IENumerable ' मॉडल को संपादित करने का प्रयास करने के लिए किया था। – teachtyler

उत्तर

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 
} 

} 

और दृश्य @model plantationmvc.Models.ArchivesViewModel

+0

क्या मैं 'CommModel गुणों के अंदर' सार्वजनिक एक्शन रिसैट इंडेक्स() 'var' के जोड़ दूंगा जैसे कि यह एक और नियंत्रक था? और 'वापसी (देखें) ' – teachtyler

+0

आपको केवल उस डेटा को जोड़ना चाहिए जो देखने के लिए इंडेक्स व्यू पर आवश्यक है मॉडल – MstfAsan

+0

व्यस्त रहें लेकिन इसे देखने में वापस आना, मैं नियंत्रक को क्या परिवर्तन करूं? क्या मैं आवश्यक डेटा को नियंत्रक पर मॉडल पर ले जाता हूं? – teachtyler

2

आप अपने मॉडल जो उस में दो संग्रह है के लिए किसी भी प्रकार की जरूरत है जोड़ें।

यह या तो आपका प्रकार हो सकता है (उदा। ArchivesViewModel उपर्युक्त उत्तर से) या आप 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); 
} 

देखें 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

प्राप्त करने के लिए सेवा कक्षाएं बना सकते हैं जबकि 'टुपल' निश्चित रूप से काम करेगा , व्यक्तिगत रूप से मुझे वास्तव में इसका उपयोग करने के लिए ट्यूपल के उपभोक्ता के लिए समय आने पर मददगार से कम होने के लिए 'आइटम 1', 'आइटम 2',' आइटमएक्स 'मिल जाता है। –

+0

सहमत हैं। यह कम पठनीय है। लेकिन कभी-कभी यह परेशान करता है कि सी # में आपको हर साधारण कार्य के लिए प्रकार बनाना होगा। तो 'टुपल', 'एक्शन', 'फनक' अच्छा उदाहरण है जब आप .NET प्रकारों का उपयोग कर सकते हैं और अपने स्वयं के बनाने की ज़रूरत नहीं है। –

+0

मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं। मैं नियंत्रक को 'var' के प्रत्येक सेट को कैसे जोड़ूं। मुझे देखने के लिए दृश्य (फाइलें) देखने की जरूरत है, लेकिन फाइलों के दोनों सेट। – teachtyler

संबंधित मुद्दे