2009-04-20 6 views
0

부분보기의 사용에 대한 나의 이해가 적절하지 않은 것 같습니다.asp.net mvc partialview

데이터베이스에서 빌드하고 부분 페이지를 마스터 페이지 내에서 사용하는 부분보기를 추가하려고합니다. 조회수 \ 공유 \ Site.Master : "내

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<NerdDinner.Models.Dinner>>" %> 
<ul> 
    <% foreach (var dinner in Model) { %> 
     <li> 
      <a href="/Dinners/Details/<%=dinner.DinnerID %>"><%= Html.Encode(dinner.Title) %></a> 
     </li> 
<% } %> 
</ul> 

"

조회수 \ 공유 \의 dinners.ascx 다음 NerdDinner 프로젝트 나는 다음을 추가 한 (느릅 나무는 MVC에 좋은 곳입니다)를 사용

"

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> 
... 
<% Html.RenderPartial("dinners"); %> 

(가) 위의 현재 저녁 식사가 현재 목록 (예 : 사이트/저녁 식사)로 availabe되는 객체 페이지에서 작동 만 것입니다 우아하고 w MVC에서이 작업을 수행 할 수있는 방법이 있나요. 또는 영리한 타협이 필요한 무언가입니까?

답변

2

왜 주인이 맞습니까? 나는 당신의 주인에게 또 다른 장소 홀더를 추가하고 그것이 의미가있는 곳에 그것을 추가 할 것입니다. 나는 마스터 페이지가 구체적인 것에 대해 불가지론 스럽다고 생각합니다. 모든 저녁 식사 페이지에 표시하려면 원 본 중첩 마스터를 만드십시오.

+0

이전에 논의한 질문에 사과 할 답변을 찾기 위해 애 쓰고 있습니다. 내가 찾고있는 해결책은 마스터에있을 필요가 없습니다. 모든 컨트롤러 액션에 ViewData를 추가하는 것은 우아하지 않습니다. 아마 뭔가 실종 된거야. 별도의 관련 메모에서 AJAX는 부분보기를 기반으로 CRUD를 구현하는 데 가장 간결한 방법입니까? – Gavin

+0

마스터 페이지를 중첩시킬 수 있다고 생각합니다. –

2

ASP.NET MVC의 가장 큰 한계 중 하나 인 IMO - 여러 뷰에서 공유 데이터를 관리합니다 (부분 ascx 뷰를 문자열로 렌더링 한 다음). 구글이나 stackoverflow에서 '공유 뷰 데이터 asp.net mvc 관리'와 같은 것을 검색한다면 다양한 옵션으로 수많은 결과를 얻을 수 있습니다. Microsoft의 MVC 팀은 이것을 문제로 인정하고 향후 릴리스에서 표준 솔루션을 포함하기를 희망합니다.

데이터 액세스를 관리하는 방법에 따라 가장 간단한 방법은 기본 Controller 클래스를 만들고 생성자 또는 OnActionExecuting() 내부에서 부분 데이터에 필요한 데이터를 검색하는 것입니다.

내가 선택한 옵션은 MvcContrib 프로젝트 내에서 Html.RenderAction() 도우미 메서드를 사용하는 것입니다. 기본적으로보기에서 조치 메소드를 호출하고 응답을 렌더링 할 수 있습니다. 컨트롤러에 대한 더 많은 지식이 필요하기 때문에보기에는 좋지 않지만 추가 코드를 추가하지 않아도되는 간단한 단기 솔루션을 제공합니다.

0

부분보기는 본질적으로 결함이있는 것처럼 보입니다. 모듈 결합을 생성하고 정의에 따라 의도적으로 응집력을 끊습니다.

0

내가 컨트롤은 모든 페이지에없는 프로그램을 경우에도, 다니엘에 동의, 그것은 그들 중 일부에 보여줍니다, 당신은 내가 사용하는 경우에만

1

한 가지 방법은 도우미 메서드를 만드는 것입니다 템플릿으로 마스터를 생성해야하며, 마스터 페이지에서 사용하십시오.

 
public static void RenderDinners(this HtmlHelper helper) 
{ 
    helper.RenderAction<DinnersController>(c => c.Dinners()); 
} 
 
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> 
... 
<% Html.RenderDinners(); %> 

도우미가 DinnersController에 저녁 식사 액션 메소드를 호출 당신이 볼 수 있듯이.

 
public ActionResult Dinners() 
{ 
    ...get dinners and put in the View 
    return Dinners(view); 
} 
2

tutorial on stephan Walther's site은이 문제를 처리합니다. dinners 객체가 채워진 곳에서 추상 기본 클래스를 사용하고 그 객체를 상속하면 항상 사용할 수 있지만 필요할 때도 항상 있어야한다는 것을 알고 있어야합니다.