2011-08-26 44 views
0

我必須爲我正在處理的項目製作大量表單。每種形式都有大量的領域。是否有可能創建一個HTML助手,可以顯示一個元素或編輯元素取決於某些變量?也許有人已經嘗試過了。我能想象,這將是這樣的:asp.net mvc剃鬚刀重用編輯器視圖顯示(與定製幫手)

@Html.EditOrDisplayFor(m=>m.Field, isReadonly) 

當它是隻讀的,只顯示該變量,當它是不是顯示了一個文本框。在這個幫手旁邊,我需要一些如果在我的意見,但它可以節省幾行100代碼,如果這是可能的)

回答

3

剛剛找到一個替代(我覺得很巧妙的方法)來做到這一點:

public static MvcHtmlString EditOrDisplayFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> p,bool readOnly){ 
     if (readOnly){ 
      return new MvcHtmlString(string.Format("{0}", html.DisplayFor(p))); 
     } else{ 
      return new MvcHtmlString(string.Format("{0}", html.EditorFor(p))); 
     } 

    } 
1

你可以做兩件事來幫助你在這裏。

擴展方法

首先是編寫擴展方法,使您可以構建一個輸入框,您的要求,如:您現在可以根據你所描述的使用

public static class Extensions 
{ 
    public static string EditOrDisplayFor(this HtmlHelper helper, Field field, bool readOnly) 
    { 
     StringBuilder builder = new StringBuilder(); 
     if(readOnly) 
     { 
      builder.Append(field.Value); 
     } 
     else 
     { 
      builder.Append("<input type=\"text\" name=\"") 
        .Append(field.Name) 
        .Append("\" value=\"") 
        .Append(field.Value) 
        .Append("\" />"); 
     } 
     return helper.Raw(builder.ToString()); 
    } 
} 

部分景色

如果這些形式最終在它們之間具有共同的分組,你可能要考慮把這些共同的部分中的部分觀點,以減少冗餘佈局代碼。

+0

嗯,從來沒有意識到它會這麼容易。我想我使用這兩個技巧,建立一些HtmlHelpers並使用部分視圖。 – Patrick

+0

嗨,我嘗試現在實現它,但我真的有一個Field變量的問題。在哪個命名空間中? – Patrick