将计算字段添加到asp.net mvc模型

时间:2010-08-13 17:06:59

标签: asp.net-mvc entity-framework

如果字段值距离链接的实体数据模型太长,我希望有一个列表缩短字段值。我可以采取以下措施:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcDR.Models.DONOR_LIST>>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
    <h2>Lists</h2>
    <table>
        <tr>
            <th></th>
            <th>LIST_NAME</th>
            <th>SUMMARY</th>
        </tr>
    <% foreach (var item in Model) { %>
        <tr>
        <td><%: Html.ActionLink("Details", "Society", new { id = item.DONOR_LIST_ID })%> |</td>
        <td><%: item.LIST_NAME %></td>
        <td><%: item.SUMMARY%></td>
    </tr>
<% } %>

</table>

并替换

        <td><%: item.SUMMARY%></td>

        <td><%: item.SHORT_SUMMARY%></td>

在Ruby中这样做非常简单,但我不确定如何在asp.net mvc的实体数据模型中工作。

4 个答案:

答案 0 :(得分:1)

我过去通常会通过创建一个代表某个EF模型类的视图特定版本的ViewModel类来解决这个问题。您可以使用类似AutoMapper的内容来帮助执行一对一字段映射的“繁琐工作”,但随后添加自己的计算SHORT_SUMMARY字段。

然后,您可以更改视图以使用视图模型:

Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcDR.Models.DONOR_LIST_VIEW>>"

答案 1 :(得分:1)

我会为字符串制作一个缩短文本的扩展方法... 然后你可以在任何领域重复使用它......

    namespace Helpers
{
    public static class StringExtensions
    {
        public static string ShortenMyString(this string s, int length)
        {

            // add logic to shorten the string....
        }
    }

答案 2 :(得分:0)

这样的事情会起作用吗?

namespace MvcDR.Models
{
   public partial class DONOR_LIST
   {
      public string SHORT_SUMMARY
      {
         get
         {
            int desiredMaxStringLength = 100;
            return SUMMARY.Substring(0, desiredMaxStringLength) + "...";
         }
      }
   }
}

答案 3 :(得分:0)

您也可以使用扩展方法执行此操作。我正在从头开始输入这个,没有IDE的好处,所以请原谅任何错别字:

public static class Extensions
{
    public static string Shorten(this string str, int maxLen)
    {
       if(str.Length > maxLen)
       {
           return string.Format("{0}...", str.Substring(0, maxlen));
       }

       return str;
    }
}

然后在你的asp.net代码中:

    <td><%: item.SUMMARY.Shorten(100) %></td>