2013-01-07 2 views
1

저는 MVC/C#을 처음 사용하고 있으며 CSHTML 파일에 다음 코드가 있습니다. 기본적으로 수행중인 작업 (삽입 또는 업데이트)을 결정하고 결과에 따라 필드를 읽기 전용으로 표시할지 편집 가능으로할지 결정합니다.Editorfor 또는 TextBoxFor를 확인하십시오.

@if (Model.DatabaseOperationFlag == DatabaseOperation.Update) 
{ 
@Html.TextBoxFor(model => model.BmUnit.BMU_ID, new {@readonly = "readonly"}) 
} 
else 
{ 
@Html.EditorFor(model => model.BmUnit.BMU_ID) 
} 

코드는 응용 프로그램 전반에 걸쳐 필요한 것입니다하지만 난 내가 유사한 코드를 사용할 수있는 제어의 일종을 쓸 수있는 방법을 어디에/내가 확실하지 오전 :

@Html.ReadOnlyOnUpdate(model => model.BmUnit.BMU_ID, model.DatabaseOperation); 

ReadOnlyOnUpdate 다음 할 것을 첫 번째 코드 섹션의 논리 사전

크리스

+0

질문과 관련이 없지만 읽기 전용보기의 경우 @ Html.DisplayFor()를 사용해야합니다. – lahsrah

답변

1

당신은 당신을 위해 그렇게 할 것 헬퍼를 만들 수있는

감사합니다. Html 헬퍼 떨어져 확장하는 방법으로 클래스를 만듭니다

public static class Helpers 
{ 
    public static IHtmlString ReadOnlyOnUpdate(this HtmlHelper helper, int BMU_ID, DatabaseOperation operation) 
    { 
     var attrs = new Dictionary<string, object>(); 
     if (operation == DatabaseOperation.Update) 
     { 
      attrs.Add("readonly", "readonly"); 
     } 
     return helper.TextBox("BMU_ID", BMU_ID, attrs); 
    } 
} 

을 제네릭의 사용을 통해, 그럴 수는 모델과 특히 BMU_ID 오프 경우에 할 수있는 아마 설정 확장 방법. EditorFor에 비슷한 만들기 :

public static IHtmlSTring ReadOnlyOnUpdateFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<TModel, TProperty>> expression, DatabaseOperation operation) 

당신은 그냥 내가 생각 BMU_ID의 종류와 모델 유형 및 TProperty와 함께 tModel을 교체해야합니다.

이 정보가 도움이되기를 바랍니다.