2010-02-10 6 views
1

다음 코드를 상속 받았으며이 코드를 더 잘 만들 수 있는지 알아보기 위해 머리를 고를 수 있는지 궁금합니다.더 나은 HtmlHelper 확장 메서드를 사용하는 데 도움이 필요합니다.

는 Heres는 우리의 부분 입력 대부분의 HTML 여기

<% if (Html.IsInputReadOnly()) { %> 
<td> 
    Id 
</td> 
<td> 
<%= Html.TextBox(
    "Id" 
    , (Model == null ? null : Model.Id) 
    , new { @readonly = "readonly", @disabled="disabled" } 
)%> 
<% } elseif (Html.IsInputDisplayable() == false) { %> 
<td></td> 
<td></td> 
<% } else { %> 
<td>Id</td> 
<td><%= Html.TextBox("Id")%> 
    <%= Html.ValidationMessage("Id", "*")%> 
</td> 
<%} %> 

사전에

답변

0

내가 밖으로 분리 할

public static bool IsInputReadOnly(this HtmlHelper helper) 
{ 
    string actionName = ActionName(helper); 

    // The Textbox should be read only on all pages except for the lookup page 
    if (actionName.ToUpper().CompareTo("EDIT") == 0) 
     return true; 
    return false; 
} 

public static bool IsInputDisplayable(this HtmlHelper helper) 
{ 
    string actionName = ActionName(helper); 

    // The Textbox should be read only on all pages except for the lookup page 
    if (actionName.ToUpper().CompareTo("CREATE") == 0) 
     return true; 
    return false; 
} 

덕분에 내 entension 방법입니다 볼 읽기 전용 및 편집 부분을 ​​2 개의 개별 부분 뷰로 분리합니다. 컨트롤러에 그대로 두어 렌더링 할 뷰를 결정하십시오. 당신은 당신의 견해에있어서 이런 종류의 결정을 내려서는 안됩니다. 그들은 멍청해야합니다.

+0

나는보기가 바보가되어야한다는 것에 동의하지만 "컨트롤 x는 조건 1에는 사용 가능해야하지만 조건 2에는 사용할 수 없도록 설정해야합니다"시나리오의 경우에는 어떻게됩니까? 그래서, 나는 그 질문에 +1을 준다. – Sunny

0

키 = 컨트롤 이름 & 값 = HtmlAttributes 해당 컨트롤에 대해 KeyValue 쌍의 컬렉션이있는 cutom ViewModel 클래스를 만들 수 있으면 컨트롤러에서 이러한 특성을 설정할 수 있습니다.

보기에서 HtmlAttribute를 컨트롤에 직접 바인딩합니다.

은 ...

HTH

그것을 밖으로 시도하지 않은 ,하지만 작동 할 수 있습니다

편집 : 키 값 쌍 HtmlAttributes가보기에 해석 될 수 등에서 IsVisible IsEditable 같은 플래그의 컬렉션 수 있습니다 확장 메소드를 통해 필요에 따라 HtmlAttributes를 렌더링하여 컨트롤러에 HTML 부분을 믹싱하지 마십시오.

1

모든 논리를 단일 확장 메서드로 래핑 할 수 있습니까?

<%= Html.SmartDisplay("Id", (Model == null ? null : Model.Id))%> 

그런 다음 확장 메서드에서 표시 가능인지 또는 읽기 전용인지를 확인하는 모든 코드를 넣습니다. 모든 페이지와 모든 컨트롤에 표준 테이블 레이아웃이없는 경우에는 작동하지 않지만 그렇게하면 작동 할 수 있습니다.

관련 문제