2014-08-30 2 views
0

사용자가 색인 페이지에 상태 메시지를 삽입하고 동일한 색인 페이지에 모든 모든 상태 메시지가 삽입되도록하려는 상태 업데이트 페이지를 만들려고합니다. 나는 Index.cshtml 페이지에 보기에서 두 개의 동일한 모델을 사용하는 방법? [MVC4]

@Html.EditorFor(model => model.message)
를 사용

public class Statuses 
{ 
    [Key] 
    public int StatusID { get; set; } 
    [DataType(DataType.MultilineText)] 
    [Required] 
    public string message { get; set; } 
} 
public class StatusContext : DbContext 
{ 
    public DbSet<Statuses> Status { get; set; } 
} 

그리고 :

이 내 모델 코드입니다.

편집기를 표시하기 위해 View에서 다음 모델을 사용했습니다.

@model LearnStart.Models.Statuses 

그러나 Multiline TextArea 아래에 모든 상태 메시지를 표시하려면 다음 중 하나를 사용해야합니다. 나는 텍스트 영역을 모두 표시 할 수 있습니다 (상태 메시지를 삽입하는)과 그 아래에 사용 가능한 모든 상태 메시지를 나열 할 수 있도록

@model IEnumerable<LearnStart.Models.Statuses> 

어떻게 같은 관점에서 두 모델을 사용 하는가? 같이

+0

으로 변환됩니다. 먼저 메시지 목록을 가져와 가장 좋은 방법으로 메시지 목록을 바인딩해야합니다 그리고 ViewBag는 뷰 측면에서 텍스트 영역에 바인딩합니다. 이를위한 코드가 필요한지 알려주십시오. –

답변

-1

쉬운 방법은 Viewbag 내부 목록을 넣어보기 목록을 표시하는 것입니다 : -

는 컨트롤러 :

Public Actionresult Myaction() 
{ 
    ......... 
    Viewbag.data = //bind list of messages here 
    return View(); 
} 

보기 :

@model LearnStart.Models.Statuses 
......... 
......... 
......... 
@if(Viewbag.data != null){ 
<table> 
@foreach(var item in Viewbag.data) 
    { 
    <tr><td>@item.message</td></tr> 
    } 
</table> 
} 
+0

@ Arjun..i이게 네가 원하는 것 같아. 더 많은 도움이 필요하다면 .. –

+0

@downvoter ... 신경 쓰지 마 .. –

+0

자기 참조 네비게이션 속성을 포함하도록 엔티티를 수정하도록 조언하고있다. .그의 데이터 모델에는 이것이 아무런 의미가 없다는 사실 외에도, 코드의 나머지 부분에서는 뷰의 데이터 표시와 관련된 기능에 대한 반향이 있습니다. 상태 간에는 관계가 없습니다. 이것은 끔찍한 충고입니다. –

2

첫째, 당신은 안 엔티티를 직접보기로 전달합니다. 권장되는 최선의 방법은보기에 맞게 조정 된 모델 인보기 모델을 사용하는 것입니다. 보기에 그런

public class MyActionViewModel { 
    public List<StatusesViewModel> StatusList {get;set;} 
    public StatusesViewModel CreatedStatus {get;set} 
} 

:

@model MyActionViewModel 

@Html.EditorFor(x => x.CreatedStatus) 

............................................. 

@Html.DisplayFor(x => x.StatusList) 

그럼 당신이 만들 수있는 뷰 모델을 사용하는 경우이 데이터 모델 개체에 연결되지 이후

둘째, 당신은 지금,이 작업을 수행 할 수 있습니다 두 개의 템플릿, EditorTemplate과 DisplayTempate :

~/Views/Shared/EditorTemplates/StatusesViewModel.cshtml에서
@model StatusesViewModel 

@using(Html.BeginForm()) { 
    @Html.EditorFor(x => x.Message) 
    <input type="submit" value="Create Status" /> 
} 

템플릿을 사용하는 방법에 대한 좋은 데요 것은

@model StatusesViewModel 

<div> 
    <span>@Model.Message</span> 
</div> 
~/Views/Shared/DisplayTemplates/StatusesViewModel.cshtml 그들은이 자동으로 사용됩니다 컬렉션 .. 어떤 foreach는 이상 또는 문 반복 것입니다. 하나의 EditorFor는 전체 컬렉션에서 작동하고 유형에 따라 템플릿을 렌더링합니다.이 경우에는 StatusViewModel.cshtml

+0

Model에 MyActionViewModel 클래스를 별도로 작성해야합니까? 그렇다면 이미 "상태"모델이 있음을 확인하십시오. – Arjun

+0

@Arjun,'class MyActionViewModel' (및 다른 뷰 모델)에 대한'ViewModels'과 관련된'using' 문을 프로젝트에 별도의 폴더를 만듭니다. Erik이 말했듯이 뷰 모델을 사용하는 것이 좋습니다. [여기에 대한 답변] (http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc)은 이점을 이해하는 데 도움이 될 수 있습니다. –

+0

@Arjun - 네, 알다시피 당신은 Statuses 모델을 가지고 있습니다. 그러나이 모델은 데이터 엔터티이며이 모델을 직접보기에는 사용하지 않는 것이 좋습니다. 보기에 사용할 View Model 버전을 만들어야합니다. 예, 더 많은 작업이지만 유지 관리가 쉽고 데이터 모델에 많은 문제가 발생하지 않습니다. –

관련 문제