ASP.NET MVC를 사용하면보기 추가 및 편집보기를 모두 작성하지 않는 것이 가장 좋습니다.


13

Add 뷰와 Edit 뷰는 매우 유사하여 2 개의 뷰를 쓰는 것이 부당합니다. 앱이 진화하면 양쪽 모두 동일한 변화가 일어날 것입니다.

그러나 일반적으로 미묘한 차이가 있습니다. 예를 들어, 필드가 추가되면 필드는 읽기 전용 일 수 있으며 해당 필드가 DropDownList이면 더 이상 ViewData에서 해당 List가 필요하지 않습니다.

두 뷰 모두에 대한 모든 정보가 들어있는 뷰 데이터 클래스를 만들어야합니까? 수행중인 작업에 따라 특정 속성이 null이 될 수 있습니까?
뷰 데이터에 연산을 열거 형으로 포함해야합니까?
모든 미묘한 차이를 < %로 묶어야합니까 (ViewData.Model.Op == Ops.Editing) {%>?

더 좋은 방법이 있습니까?

  0

예! 같은보기를 사용할 수있는 것이 좋을 것입니다 : 추가, 편집 및보기 ... 14 nov. 082008-11-14 17:56:24

4

보기가 너무 복잡해지기를 싫어합니다. 지금까지 편집과 추가를위한 별도의보기가있었습니다. 반복을 피하기 위해 공통 요소를 저장하기 위해 사용자 정의 컨트롤을 사용합니다. 두 뷰 모두 동일한 ViewData를 중심으로 배치 될 것이고 데이터에 내 개체가 새 개체인지 또는 기존 개체인지 나타내는 마커가 있습니다.

이것은 당신이 규정 한 것 이상으로 우아하지 않으므로 Django 또는 Rails 남자가 입력을 제공 할 수 있는지 궁금합니다.

나는 asp.net mvc를 좋아하지만 아직 성숙 중이며 웹 사이트 제작의 마찰을 없애기 위해 더 많은 설탕이 필요합니다.


2

저는 개인적으로보기에서 바로 if/else를 사용하는 것을 선호합니다. 모든 것을 한 번에 볼 수있게 도와줍니다.

태그 수프를 피하려면 도우미 메서드를 만드는 것이 좋습니다.

<%= Helper.ProfessionField() %> 

string ProfessionField() 
{ 
    if(IsNewItem) { return /* some drop down code */ } 
    else { return "<p>" + _profession+ "</p>"; }   
} 

5

정말 쉽습니다. 블로그 게시물을 수정한다고 가정 해 보겠습니다.

여기에 새/편집에 대한 2 개의 행동의 :

public class BlogController : Controller 
{ 
    public ActionResult New() 
    { 
     var post = new Post(); 
     return View("Edit", post); 
    } 

    public ActionResult Edit(int id) 
    { 
     var post = _repository.Get(id); 
     return View(post); 
    } 

    .... 

} 

을 그리고 여기 뷰의 :

<% using(Html.Form("save")) { %> 
<%= Html.Hidden("Id") %> 

<label for="Title">Title</label> 
<%= Html.TextBox("Title") %> 

<label for="Body">Body</label> 
<%= Html.TextArea("Body") %> 

<%= Html.Submit("Submit") %> 
<% } %> 

그리고 여기보기가 제출하는 저장 액션의에 :

public ActionResult Save(int id, string title, string body) 
{ 
    var post = id == 0 ? new Post() : _repository.Get(id); 
    post.Title = title; 
    post.Body = body; 

    _repository.Save(post); 

    return RedirectToAction("list"); 
} 
  0

원래의 질문에 대한 질문과 같이 편집 한 화면을 읽기 전용으로 전환하는 예를 포함하도록 답변을 수정 해보십시오. 11 dec. 092009-12-11 13:55:54


1

CustomViewData 클래스를 지정하고 여기에 매개 변수를 전달할 수 있습니다.


public class MyViewData { 
    public bool IsReadOnly { get; set; } 
    public ModelObject MyObject { get; set; } 
} 

그리고 두 뷰 모두이 ViewData를 구현해야합니다. 결과적으로 제공된 IsReadOnly 속성을 사용하여 UserControl 결과를 관리 할 수 ​​있습니다.

컨트롤러가 이것을 사용하므로 단위 테스트를 수행 할 수 있으며 뷰에 구현이 없으므로 MVC 원칙을 존중할 수 있습니다.