Как получить текст вместо значения в ASP.NET MVC вычисляемом поле для элемента списка? - PullRequest
0 голосов
/ 28 мая 2019

В следующем классе модели я пытаюсь создать вычисляемое поле с именем FullAddress. Я могу заставить его работать, но сейчас он отображает значения, а не текст для 4 различных полей идентификатора. Я хотел бы отобразить текст вместо значения для следующих полей:

  • TLRoadDirectionID
  • TLRoadTypeID
  • VendorAddUnitTypeOneID
  • VendorAddUnitTypeTwoID

Ранее я получал большую помощь по правильному созданию FullAddress, поэтому я знаю, что если бы я изменил поля на:

  • TLRoadDirection.Direction
  • TLRoadType.RdType
  • TLUnitTypeOne.UnitType
  • TLUnitTypeTwo.UnitType

тогда он работает как положено, но только , если все эти 4 поля содержат значение и не являются нулевыми или пустыми. Но эти поля не всегда будут иметь значения для каждой записи.

Итак, как я могу изменить это вычисляемое поле, чтобы отображать текст для каждого, когда есть текст для отображения, и не получать исключение нулевой ссылки, если какое-либо или все из этих 4 полей являются нулевыми или пустыми?

Ниже приведен класс (пожалуйста, дайте мне знать, если требуется дополнительная информация):

using System;
using System.ComponentModel.DataAnnotations;
using System.Web;

namespace VendorMgr.Models
{
public class Vendor
{
    [Display(Name = "Vendor ID")]
    public int ID { get; set; }

    private string _createdBy = HttpContext.Current.User.Identity.Name;
    [Required]
    [Display(Name = "Created By")]
    public string VendorCreatedBy
    {
        get
        {
            return (_createdBy == HttpContext.Current.User.Identity.Name) ? HttpContext.Current.User.Identity.Name : _createdBy;
        }
        set
        {
            _createdBy = HttpContext.Current.User.Identity.Name;
        }
    }

    private DateTime _createdOn = DateTime.Now;
    [Required]
    [Display(Name = "Date Created")]
    [DataType(DataType.DateTime)]
    public DateTime VendorCreatedDt
    {
        get
        {
            return (_createdOn == DateTime.Now) ? DateTime.Now : _createdOn;
        }
        set
        {
            _createdOn = value;
        }
    }

    [Required]
    [StringLength(128)]
    [Display(Name = "Vendor Name")]
    public string VendorName { get; set; }

    [Display(Name = "Phone Number")]
    [DataType(DataType.PhoneNumber)]
    [RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Not a valid phone number")]
    public string VendorPhoneNumber { get; set; }

    [Display(Name = "Email")]
    [StringLength(255)]
    [EmailAddress(ErrorMessage = "Invalid Email Address")]
    public string VendorEmail { get; set; }

    [Display(Name = "Address Number")]
    [StringLength(10)]
    public string VendorAddNum { get; set; }

    [Display(Name = "Direction")]
    public int? TLRoadDirectionID { get; set; }

    [Display(Name = "Road Name")]
    [StringLength(128)]
    public string VendorAddName { get; set; }

    [Display(Name = "Road Type")]
    public int? TLRoadTypeID { get; set; }

    [Display(Name = "Unit Type")]
    public int? VendorAddUnitTypeOneID { get; set; }

    [Display(Name = "Unit")]
    [StringLength(20)]
    public string VendorAddUnitOne { get; set; }

    [Display(Name = "Unit Type")]
    public int? VendorAddUnitTypeTwoID { get; set; }

    [Display(Name = "Unit")]
    [StringLength(20)]
    public string VendorAddUnitTwo { get; set; }

    [Display(Name = "Full Address")]
    public string FullAddress
    {
        get
        {
            return $"{VendorAddNum} {TLRoadDirectionID} {VendorAddName} {TLRoadTypeID} {VendorAddUnitTypeOneID} {TLUnitTypeOne.UnitType} {VendorAddUnitOne} {VendorAddUnitTypeTwoID} {VendorAddUnitTwo}";
        }
    }

    [Display(Name = "City")]
    [StringLength(128)]
    public string VendorAddCity { get; set; }

    [Display(Name = "State")]
    public int? TLStateAcronymnID { get; set; }

    [Display(Name = "Zip Code")]
    [StringLength(20)]
    public string VendorZipCode { get; set; }

    [Display(Name = "Country")]
    public int? TLCountryID { get; set; }

    [Display(Name = "Active")]
    public bool VendorActive { get; set; }

    public virtual TLRoadDirection TLRoadDirection { get; set; }
    public virtual TLRoadType TLRoadType { get; set; }
    public virtual TLUnitType TLUnitTypeOne { get; set; }
    public virtual TLUnitType TLUnitTypeTwo { get; set; }
    public virtual TLStateAcronymn TLStateAcronymn { get; set; }
    public virtual TLCountry TLCountry { get; set; }
}

}

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Я решил просто обработать это в виде вместо класса модели.

0 голосов
/ 28 мая 2019
[Display(Name = "Full Address")]
public string FullAddress
{
    get
    {
        IEnumerable<string> allFields = new[] { VendorAddNum, TLRoadDirectionID, VendorAddName, TLRoadTypeID, VendorAddUnitTypeOneID, TLUnitTypeOne.UnitType, VendorAddUnitOne, VendorAddUnitTypeTwoID, VendorAddUnitTwo };
        return String.Join(" ", allFields.Where<string>(x => x != null));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...