2012-04-12 4 views
0

asp.net mvc3 C# 응용 프로그램이 있습니다. 그것은 데이터베이스를 사용합니다. 데이터베이스는 요구 사항에 따라 소프트 삭제 시나리오를 지원합니다. 소프트 삭제 시나리오가 계단식으로 연결되지 않습니다. 삭제 된 것으로 표시된 기록은 회색으로 표시됩니다. 내 문제는 모델에서 각 디스플레이를 항상 HTML 마크 업과 스타일로 둘러 쌀 필요없이이 작업을 수행하는 방법입니다. 예를 들어@ Models items을보다 효율적으로 꾸미려면 어떻게해야합니까?

:

<span @if(m.Box.isDeleted){ 
<text>style="background-color:gray"</text> 
}>@m.Box.Name @m.Box.Description</span> 

내가 그렇게하지만, 말 그대로 모든 뷰 모델 객체 디스플레이에해야 할 모든 여분의 마크 업을 볼 수 있습니다.

@ m.Box.Name.AddMarkup() 또는 그 정도까지 무언가하고 싶습니다. 아마도 내가 내가이 접근하거나하는 방법을 잘 모르겠습니다 후

namespace place.Markup 
public class Markup 
{ 
public ModelItem(object o, property name) 
{ 
    //perhaps use reflection so the flag isnt passed all the time 
    //create markup with flag conditional decoration 
    //return markup 
} 
} 

등 올바른 마크 업을 항목을했다 후 반환 도우미 및

@Markup.ModelItem(@m.Box.Description) 

을 만들 수있는 제안 중 하나 경우 방법은 다른 사람들이이 문제에 어떻게 접근했는지입니다. 소프트 삭제 된 항목을 표시하려고 시도한 것은 무엇입니까? 이 어딘가에 대한 좋은 자습서가 있습니까? 나는이 주제에 대해 많은 자료를 찾을 수 없었다.

참고 : 이러한 개체의 필터링은 문제가 아니며 의도적으로 표시되며 소프트 삭제를 반영하는 방식으로 표시해야합니다.

+0

내가 당신의 질문이 무엇인지 이해가 안 :

없음 원래 내 생각하지만 난이 아이디어를 가지고 소스를 발견했다. –

+0

@KirkWoll - 충분히 분명한 것에 대해 사과드립니다. ** 효과적인 방식으로 값에 따라 뷰 모델 객체에 뷰의 마크 업을 추가하려면 어떻게합니까? ** –

답변

2

내가

public static MvcHtmlString DisplayDeleteCheckFor<TModel, TValue>(
    this HtmlHelper<TModel> html, 
    Expression<Func<TModel, TValue>> expression, bool condition) { 

    var value = html.DisplayFor(expression).ToString(); 
    var style=condition ? "style=\"background-color:gray\"" : string.Empty; 

    return MvcHtmlString.Create(
     string.Format("<span {0}>{1}</span>", style, value)); 
} 
1

처럼 그것을 할 수있는 쉬운 방법을 DisplayFor

뭔가 하나 많은 과부하를 기반으로 Html 헬퍼를 만들 것, CSS를 활용하는 것입니다. 이것은 매우 어려운 예입니다. 보기에

if (m.Box.isDeleted) 
{ 
    m.Box.listOfClasses.Add("isDeleted"); 
} 

:

<div class="@string.Join(" " , m.Box.listOfClasses)"> 
    <span>blah</span><br/> 
    <span class="showGrayIfDeleted">This will be gray if deleted.</span><br/> 
    <span class="showGrayIfDeleted">@m.Box.Name @m.Box.Description</span><br/> 
</div> 

만 컨테이너 HTML에 하나의 클래스를 적용 할 필요가 CSS의 영향 캐스 케이 딩을 활용하여 컨트롤러에서

<style> 
.isDeleted .showGrayIfDeleted 
{ 
    background-color:gray; 
} 
</style> 

요소를 사용하여 모든 내부 요소의 배경이 달라집니다.

<table> 
    <thead> 
     <tr> 
      <td>Date</td> 
      <td>Name</td> 
      <td>Is Deleted</td> 
      <td>Active</td> 
     </tr> 
    </thead> 
     <tr> 
      <td>Today</td> 
      <td>Bottle</td> 
      <td class="@(ProductCssHelper.IsDeleted(Model.IsDeleted))">Yes</td> 
      <td class="@(ProductCssHelper.IsActive(Model.IsActiveAction))">No</td> 
     </tr> 
</table> 

CSS 정의가 포함되어 있지 않습니다하지만,이 뜻 : 면도칼에서

public static class ProductCssHelper 
{ 
    public static string IsDeleted(bool IsDeleted) 
    { 
     return IsDeleted ? "deleted" : String.Empty 
    } 

    public static string IsAction(bool IsActiveAction) 
    { 
     return IsAction ? "active-action" : "inactive-action" 
    } 
} 

:이 무슨 짓을했는지

1

는 CSS 정적 도우미과 같이 구성되어 수업을하는 것입니다 정의되고있는 CSS 클래스의 캐릭터 라인을 돌려줍니다.

저는 CSSHelper 폴더를 만들 수 있고 컨트롤러 또는보기/영역별로 분할해야하는 헬퍼 클래스가 여러 개 있으므로이 메서드를 사용하면 모든 것을 한 곳에서 가질 수 있습니다. http://www.arrangeactassert.com/asp-net-mvc-view-best-practices-keep-logic-out-of-your-views/

관련 문제