我继承了以下代码,我想知道我是否可以挑选你的大脑,看看是否有更好的方法来复制它。
继承了我们大部分部分输入视图的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>
<%} %>
这是我的entension方法
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;
}
提前致谢
答案 0 :(得分:1)
您可以将所有逻辑包装到单个扩展方法中吗?
<%= Html.SmartDisplay("Id", (Model == null ? null : Model.Id))%>
然后在扩展方法中,放入检查它是可显示还是只读的所有代码。如果您在所有页面和所有控件上都没有标准表格布局,这将无效,但如果您这样做,它可能会有效。
答案 1 :(得分:0)
我会将只读和可编辑部分分成2个单独的部分视图。将它留给控制器来决定应该呈现哪个视图。你不应该在你的观点中做出这些决定 - 他们应该是愚蠢的。
答案 2 :(得分:0)
如果你可以创建一个cutom ViewModel类,它有一个KeyValue对的集合,其中key = control name&amp; Value =该控件的HtmlAttributes,控制器可能能够设置这些属性。
在View上,您将直接将HtmlAttribute绑定到控件。
没有尝试过,但可能有用......
HTH
编辑:KeyValue对HtmlAttributes可能是IsEditable,IsVisible等标志的集合,可以通过扩展方法在View上解释,以根据需要呈现HtmlAttributes,这样我们就不会将HTML部分混合到控制器中< / p>