ส่งสองรุ่นพร้อมวันที่ที่เกี่ยวข้องเพื่อดู MVC4

วิธีส่งสองโมเดลพร้อมวันที่ที่เกี่ยวข้องเพื่อดู MVC4

ฉันมีข้อกำหนดระดับหนึ่งและซัพพลายเออร์ต้องตรวจสอบภายในว่าเขามีข้อกำหนดเฉพาะหรือไม่

ดังนั้นฉันจึงต้องแสดงรายการข้อกำหนดในคอลัมน์หนึ่งและการตรวจสอบ/คำตอบของซัพพลายเออร์ในคอลัมน์อื่นในมุมมองของฉัน ดังนั้นฉันเดาว่าฉันจะต้องผ่าน 2 แบบจำลองที่เกี่ยวข้องกัน จะทำอย่างไร? แล้วจัดเก็บคำตอบของซัพพลายเออร์ตามข้อกำหนดเฉพาะไว้ในฐานข้อมูล

นี่โมเดลของฉัน

 namespace OTMS.Models
{
public class Requiernments
{
           [Key]
           public int RequiernmentId { get; set; }
           public int ID { get; set; }//link to project Name
           public string RequiernmentName { get; set; }
           public string RequiernmentType { get; set; }

     }

 namespace OTMS.Models
 {
  public class Supplier
   {
    [Key]
    public int SupplierId { get; set; }
    public int RequiernmentId { get; set; }
    public string SupplierName { get; set; 
    public string Answer{ get; set; }
   }
 }

อัปเดต:

มุมมองของฉัน:

namespace OTMS.ViewModel
{
   public class SupplierAnswerViewModel
   {

     public Supplier Sup{ get; set; }
      public Requiernments Req { get; set; }
  }
}

ตัวควบคุมของฉัน:

     public ProjectContext b = new ProjectContext();
    public ActionResult ListRequiermentBySupplier(int ID) //Id of the project
    {


        var Project = b.RequiernmentEntries.Where(s => s.ID == ID).ToList();//geting all requierment under project


        List<SupplierAnswerViewModel> listvm = new List<SupplierAnswerViewModel>();
        SupplierAnswerViewModel vm = new SupplierAnswerViewModel();

        vm.requirements = new Requiernments();
        vm.requirements.RequiernmentId = ID;

        vm.supplier = new Supplier();
        vm.supplier.SupplierId = 2; //am testing supplier of this id=2 for now

       listvm.Add(vm);

        return View(listvm); ;
    }

มุมมองของฉัน:

   @model IEnumerable<OTMS.ViewModel.SupplierAnswerViewModel>



 <table>
  <tr>
    <th>
        RequiernmentName
    </th>
    <th>
       RequiernmentType
    </th>
    <th>
        UserId
    </th>
    <th>
       SupplierName
    </th>
    <th>
       Supplier Answer
    </th>


    <th></th>
</tr>
@if (Model != null)
 {
     foreach (var item in Model)
     {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.requirements.RequiernmentName)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.requirements.RequiernmentType)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.supplier.UserId)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.supplier.SupplierName)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.supplier.Answer)
    </td>
    <td>


    <td>
        @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |

    </td>
</tr>
     }
   }

 </table>

person user1476956    schedule 03.06.2014    source แหล่งที่มา
comment
เป็นไปได้ที่ซ้ำกันของ ASP.NET MVC - ดูด้วยหลายรุ่น   -  person Erik Philips    schedule 03.06.2014


คำตอบ (1)


สร้างโมเดลมุมมอง

public class ViewModel{
    public Requirements requirements { get; set; }
    public Supplier supplier { get; set; }
}

จากนั้นบนคอนโทรลเลอร์ของคุณ

List<ViewModel> listvm = new List<ViewModel>();
ViewModel vm = new ViewModel();
vm.requirements.RequiernmentId 
vm.supplier.SupplierID = ...
listvm.Add(vm);

แก้ไข

หากต้องการส่งรายการใดรายการหนึ่งเป็นรายการโปรดดูการเปลี่ยนแปลงของฉันด้านบน จากนั้นส่งโมเดลมุมมองของคุณไปยังมุมมอง

return View(listvm);

และในมุมมองของคุณ

@model List<OTMS.ViewModel.SupplierAnswerViewModel>
person Matt Bodily    schedule 03.06.2014
comment
และฉันจะถ่ายทอดสิ่งนั้นไปสู่ความคิดของฉันได้อย่างไร? - person user1476956; 03.06.2014
comment
โปรดตรวจสอบการอัปเดตของฉัน ..กำลังได้รับข้อผิดพลาดต่อไปนี้:รายการโมเดลที่ส่งเข้าสู่พจนานุกรมเป็นประเภท 'OTMS.ViewModel.SupplierAnswerViewModel' แต่พจนานุกรมนี้ต้องการรายการโมเดลประเภท 'System.Collections.Generic.IEnumerable`1[ OTMS.ViewModel.SupplierAnswerViewModel]' - person user1476956; 03.06.2014
comment
นั่นเป็นเพราะคุณกำลังส่งแบบจำลองเดียวไปยังมุมมอง แต่คุณได้กำหนดรายการของแบบจำลองนั้นในมุมมอง หากคุณส่งรายการหรือเปลี่ยนมุมมองของคุณเป็นอินสแตนซ์เดียวเท่านั้น ข้อผิดพลาดจะหายไป - person Matt Bodily; 03.06.2014
comment
อืม สิ่งที่ฉันต้องการคือรายการและซัพพลายเออร์ของผู้ใช้จะให้คำตอบแล้วโพสต์ ....มันทำงานเหมือนแบบฟอร์มในการตอบคำถาม จากนั้นฉันจะสามารถตรวจสอบคำตอบของซัพพลายเออร์ทุกราย ..ฉันจะส่งผ่านเป็นรายการได้อย่างไร - person user1476956; 03.06.2014
comment
ฉันลอง ..แต่แล้วคุณไม่สามารถใช้บางอย่างเช่น @Html.DisplayFor(modelItem =› item.requirements.RequiernmentName)......มันจะไม่แสดงให้ฉันเห็น (RequiernmentName,RequiernmentType)...etc - person user1476956; 03.06.2014
comment
ดูเหมือนว่าคุณต้องการแบบตัวต่อตัวเกี่ยวกับข้อกำหนดและซัพพลายเออร์ แต่เป็นรายชื่อของพวกเขา ฉันได้เปลี่ยนคำตอบเพื่อสะท้อนสิ่งนั้น - person Matt Bodily; 03.06.2014
comment
ไม่ ถ้าคุณดูโค้ดของฉัน ฉันกำลังส่งรายการไปยังมุมมอง และโมเดลในมุมมองก็เป็นรายการ ตรงกันจึงไม่มีข้อผิดพลาด - person Matt Bodily; 03.06.2014
comment
โอเค อย่างน้อยตอนนี้ฉันก็สามารถรับมุมมองพร้อมรายการว่าง ..ฉันคิดว่าฉันมีปัญหาภายในคอนโทรลเลอร์ ..(ตรวจสอบคอนโทรลเลอร์อัปเดต)....ฉันไม่ต้องการสร้างข้อกำหนดใหม่เพราะฉันมีข้อกำหนดเหล่านั้นอยู่ใน DB ดังนั้นฉันจึงใช้มันเท่านั้น (โครงการ var) .. - person user1476956; 03.06.2014