C# ASP.NET MVC中的DRY-详细信息显示与编辑表单

C# ASP.NET MVC中的DRY-详细信息显示与编辑表单,c#,asp.net-mvc,C#,Asp.net Mvc,我正在尝试学习ASP.NETMVC,我遇到了这个问题:我有一个“查看产品详细信息”表单,我想将其作为添加/编辑表单重用。(当您查看产品详细信息时,如果您有权这样做,则应显示一个编辑链接;它应重新显示相同的表单,但这次启用了文本框字段。) 现在,详细信息视图如下所示: <% var product = ViewData.Model; %> <table> <tr> <td>Name</td> </tr> &

我正在尝试学习ASP.NETMVC,我遇到了这个问题:我有一个“查看产品详细信息”表单,我想将其作为添加/编辑表单重用。(当您查看产品详细信息时,如果您有权这样做,则应显示一个编辑链接;它应重新显示相同的表单,但这次启用了文本框字段。)

现在,详细信息视图如下所示:

<% var product = ViewData.Model; %>
<table>
  <tr>
    <td>Name</td>
  </tr>
  <tr>
    <td><%= Html.TextBox("Name", product.Name, new { size = "50", disabled = "disabled"})%></td>
  </tr>

名称
有没有一种方法可以重用它而不在视图中添加太多逻辑?例如,我需要删除
disabled=“disabled”
部分(但是
size
部分需要保留在那里),将所有内容放入表单中,等等


如果做不到,没关系,我只是尽量不重复同样的事情几次,以防我需要更改它(我会这样做)。

您可以始终传入一个值,指示您处于什么模式或您拥有什么特权:

ViewData.Model.CanEdit
所以,您可能希望为您的模型创建一个复合类,而不仅仅是使用产品

public class ProductViewData
{
    public Product Product {get; set;}
    public bool CanEdit {get; set;}
}
使用您可以这样做(加强Todd Smith的建议):

x.Name).大小(50).已禁用(ViewData.Model.CanEdit)%>

谢谢。。。我想我需要调查一下。我把托德的回答标记为答案,因为我无论如何都需要这样做,但你的建议也很好。
<%=this.TextBox(x => x.Name).Size(50).Disabled(ViewData.Model.CanEdit)%>