Asp.net mvc 需要帮助想出更好的HtmlHelper扩展方法吗

Asp.net mvc 需要帮助想出更好的HtmlHelper扩展方法吗,asp.net-mvc,html-helper,Asp.net Mvc,Html Helper,我继承了下面的代码,我想知道我是否可以仔细研究一下你的大脑,看看是否有更好的方法来复制它 下面是我们大部分部分输入视图的html <% if (Html.IsInputReadOnly()) { %> <td> Id </td> <td> <%= Html.TextBox( "Id" , (Model == null ? null : Model.Id) , new { @readonly = "readonly",

我继承了下面的代码,我想知道我是否可以仔细研究一下你的大脑,看看是否有更好的方法来复制它

下面是我们大部分部分输入视图的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>
<%} %>

提前感谢

我将把只读部分和可编辑部分分成两个单独的局部视图。让控制器决定应该渲染哪个视图。你不应该在你的视图中做出这样的决定——它们应该是愚蠢的。

我会将只读部分和可编辑部分分成两个单独的部分视图。让控制器决定应该渲染哪个视图。您不应该在视图中做出此类决策-它们应该是愚蠢的。

如果您可以创建一个cutom ViewModel类,该类具有该控件的KeyValue对集合,其中key=control name&Value=HtmlAttributes,则控制器可能能够设置这些属性

在视图上,您将直接将HtmlAttribute绑定到控件

还没有尝试过,但可能有效


编辑:KeyValue对HtmlAttributes可能是一组标志,如IsEditable,IsVisible等,可通过扩展方法在视图上进行解释,以根据需要呈现HtmlAttributes,这样我们就不会将HTML部分混合到控制器中

如果您可以创建一个cutom ViewModel类,该类具有该控件的KeyValue对集合,其中key=control name&Value=HtmlAttributes,控制器可能能够设置这些属性

在视图上,您将直接将HtmlAttribute绑定到控件

还没有尝试过,但可能有效


编辑:KeyValue对HtmlAttributes可能是一组标志,如IsEditable、IsVisible等。这些标志可以通过扩展方法在视图上进行解释,以根据需要呈现HtmlAttributes,这样我们就不会将HTML部分混合到控制器中

能否将所有逻辑包装到一个扩展方法中

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


然后在扩展方法中,放入所有检查其是否可显示或只读的代码。如果在所有页面和控件上都没有标准的表布局,这将不起作用,但如果有,它可能会起作用。

能否将所有逻辑封装到一个扩展方法中

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


然后在扩展方法中,放入所有检查其是否可显示或只读的代码。如果在所有页面和控件上都没有标准的表布局,这将不起作用,但如果有,它可能会起作用。

我同意视图需要是哑的,但在“应为条件1启用控件x,但为条件2禁用控件x”的情况下该怎么办?所以,我给这个问题一个+1。我同意视图需要是哑的,但是在“应该为条件1启用控制x,但为条件2禁用控制x”的情况下会怎样呢?所以,我给这个问题一个+1。