2013-08-02 3 views
1

내가 만든 두 개의 다른 모델에 내 뷰에서 액세스 할 수있는 뷰 모델을 만들고 싶습니다.2 가지 모델로 뷰 모델을 만드는 법

두 개의 다른 모델과 하나의 모델을 만들어 두 모델을 모두 포함합니다.

내 문제는 제 생각에는 데이터에 액세스 할 수 없습니다.

누군가가이 문제를 해결할 수 있기를 바랍니다. 난 내보기에 표시 할 필요가 무엇

은 다음과 같습니다 표 : 이름 제목

표 2 :

모델 1 : 각 이미지 여기

의 picpath은 내 코드입니다

public class Table1 
    { 
     public int ID { get; set; } 
     public string name{ get; set; } 
     public string title { get; set; } 
     public string edition{ get; set; } 
     public string number{ get; set; } 

    } 

    public class DefaultConnection : DbContext 
    { 
     public DbSet<Table1> Res{ get; set; } 
    } 

모델 2 :

public class Images 
    { 
     public SelectList ImageList { get; set; } 
     public int ID { get; set; } 
     public string title{ get; set; } 
     public string picpath { get; set; } 

     public Img) 
     { 
      ImageList = GetImages(); 
     } 

     public SelectList GetImages() 
     { 
      var list = new List<SelectListItem>(); 
      string connection = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 

      using (var con = new SqlConnection(connection)) 
      { 
       con.Open(); 
       using (var command = new SqlCommand("SELECT * FROM Myimages", con)) 
       { 
        SqlDataReader reader = command.ExecuteReader(); 
        while (reader.Read()) 
        { 
         string title = reader[1] as string; 
         string imagePath = reader[2] as string; 
         list.Add(new SelectListItem() { Text = title, Value = imagePath }); 
        } 
       } 
       con.Close(); 
      } 
      return new SelectList(list, "Value", "Text"); 
     } 

    } 

MY VIEW 모델 :

public class ViewModel 
    { 
     public Table1 table1{ get; set; } 
     public Images xpto { get; set; } 

     public ViewModel(Table1 table1) 
     { 
      Table1 = table1; 
      xpto = new Images(); 
     } 
    } 



**Controller:** 

public ActionResult HotSpotMaker(int id = 0) 
     { 
      Table1 rev = db.Res.Find(id);   
      if (rev == null) 
      { 
       return HttpNotFound(); 
      } 
//Here is something missing, have delete my version here because don´t make any sense 
      return View(rev); 
     } 

보기 :

@model myproject.Models.ViewModel 

참고 : 나는 많이 검색하고 찾을 수있는 많은 사람들이 이것을 사용합니다 : @model myproject.Web.Models.ViewModel,하지만이 웹을 선택할 수 없습니다. . 이것이 관련이 있는지 아닌지는 모르겠다. 나는 그 말을하는 것이 중요하다고 생각한다.

+0

당신은 목표를 달성하기 위해 두 가지 방법을 내 질문에 참조 할 수처럼 당신의 생성자를 호출하여 경우에 Table1 객체

에서 ViewModel 객체를 생성하는 방법이 필요합니다 . http://stackoverflow.com/questions/17502294/what-is-the-proper-way-to-submit-data-from-parent-form-with-partial-view-mvc-4 –

답변

3

Table1을보기 모델로 전달했으나보기 모델이 아닙니다.

시도 :

return View(new Models.ViewModel(rev)); 
+0

음 ... 괜찮습니다. 이제 다른 오류가 있습니다. ViewModel에 "name"에 대한 정의가 없으므로 ViewModel 유형의 첫 번째 인수를 받아들이지 않습니다. – user2232273

+2

@ user2232273 다음에 어딘가에 (아마도 뷰에서) 이름에 모델이지만 name 속성은 없습니다. 그것은'table1'과'xpto'를 가지고 있습니다, 그래서 당신은'@ Model.table1.name'을 호출 할 필요가 있다고 생각합니다. –

+0

thx 그것은 작동합니다 ... 나는이 @ Html.DisplayFor (model => model)을 가졌습니다.이름) 및 @ table1.xpto.name .. thx로 변경합니다. – user2232273

1

은, 당신의 View 오히려 단순한 기대하고 있어요 솟아 ViewModel (즉 그런데 나쁜 이름입니다,하지만 난 그냥 테스트 용의자),하지만 당신은 그것을 Table1을주고있다, 당신의 견해는 단순히 그걸로 무엇을 해야할지 모릅니다.

당신은 너무

return View(new ViewModel(rev)); 
+0

게시물에 대한 thx 사이먼 .. 이름 viewmodel은 단지 테스트입니다 .. 어떻게이 작품은 mvc 4 ..... 내가 이해하려고 그것을 시도하지만 다른 오류를 지금 준다. 당신은 @ moo-juice에 대한 나의 코멘트를 볼 수 있는가? 지금 오류가 무엇인지 설명한다. – user2232273

+1

보기가 잘못 되었기 때문에 그저'@using를 변경하는 것 이상을 할 필요가있다. myproject.Models.Table1'을'@using myproject.Models.ViewModel'을 사용하면'ViewModel' 객체는 name 프라퍼티를 갖지 않습니다.하지만'Table1' 객체를 포함하고 있습니다. @Html.DisplayNameFor (model => model.table1.name)에 의해'@ Html.DisplayNameFor (model => model.name)'과 같은 뷰에서 내용을 변경해보십시오. 뷰 모델은 특별한 것이 아니며, 그냥 단순한 단순한 객체 인 "view model"은 그들의 역할을 지정하는 명명 규칙입니다. –

+0

예, 제 견해를 바꿀 수 있습니다 ... @Html.DisplayFor (model => model.n_empresa) 이건 작동하지 않습니다 ..이 @ table.xpto.name ...으로 변경합니다. – user2232273

관련 문제