我必須爲我正在處理的項目製作大量表單。每種形式都有大量的領域。是否有可能創建一個HTML助手,可以顯示一個元素或編輯元素取決於某些變量?也許有人已經嘗試過了。我能想象,這將是這樣的:asp.net mvc剃鬚刀重用編輯器視圖顯示(與定製幫手)
@Html.EditOrDisplayFor(m=>m.Field, isReadonly)
當它是隻讀的,只顯示該變量,當它是不是顯示了一個文本框。在這個幫手旁邊,我需要一些如果在我的意見,但它可以節省幾行100代碼,如果這是可能的)
我必須爲我正在處理的項目製作大量表單。每種形式都有大量的領域。是否有可能創建一個HTML助手,可以顯示一個元素或編輯元素取決於某些變量?也許有人已經嘗試過了。我能想象,這將是這樣的:asp.net mvc剃鬚刀重用編輯器視圖顯示(與定製幫手)
@Html.EditOrDisplayFor(m=>m.Field, isReadonly)
當它是隻讀的,只顯示該變量,當它是不是顯示了一個文本框。在這個幫手旁邊,我需要一些如果在我的意見,但它可以節省幾行100代碼,如果這是可能的)
剛剛找到一個替代(我覺得很巧妙的方法)來做到這一點:
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)));
}
}
你可以做兩件事來幫助你在這裏。
擴展方法
首先是編寫擴展方法,使您可以構建一個輸入框,您的要求,如:您現在可以根據你所描述的使用
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());
}
}
。
部分景色
如果這些形式最終在它們之間具有共同的分組,你可能要考慮把這些共同的部分中的部分觀點,以減少冗餘佈局代碼。
嗯,從來沒有意識到它會這麼容易。我想我使用這兩個技巧,建立一些HtmlHelpers並使用部分視圖。 – Patrick
嗨,我嘗試現在實現它,但我真的有一個Field變量的問題。在哪個命名空間中? – Patrick