Как использовать DisplayFor для отображения типа IPAddress?

Я только начал изучать страницу бритвы asp.net после учебника Microsoft. и я пытаюсь сделать свое маленькое веб-приложение для отображения устройств, и каждое устройство будет содержать адрес IPv4. Я использую System.Net, чтобы содержать IP-адрес в моей модели устройства, и использую Scaffolder для создания основных страниц. Однако, когда я запускаю свое приложение, оно показывает ошибку для части IP-адреса. Может ли кто-нибудь предложить способ решить эту проблему? Ниже приведен мой код для моей модели устройства:

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Net;

namespace AirFiber.Models
{
    public enum DeviceType
    {
        Master,Node,Switch,Router
    }
    public class Device
    {
        public int DeviceID { get; set; }
        public string DeviceName { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Brand { get; set; }
        public string DeviceModel { get; set; }

        public DeviceType DeviceType { get; set; }

        public AirLink AirLink { get; set; }

        public IPAddress DeviceIP { get; set; }

        public Location Location { get; set; }
    }
}

Ниже приведен код на странице cshtml:

@model AirFiber.Pages.Devices.DetailsModel

@{
    ViewData["Title"] = "Details";
}

<h1>Details</h1>

<div>
    <h4>Device</h4>
    <hr />
    <dl class = "row">
        <dt class = "col-sm-2">
            @Html.DisplayNameFor(model => model.Device.DeviceName)
        </dt>
        <dd class = "col-sm-10">
            @Html.DisplayFor(model => model.Device.DeviceName)
        </dd>
        <dt class = "col-sm-2">
            @Html.DisplayNameFor(model => model.Device.UserName)
        </dt>
        <dd class = "col-sm-10">
            @Html.DisplayFor(model => model.Device.UserName)
        </dd>
        <dt class = "col-sm-2">
            @Html.DisplayNameFor(model => model.Device.Password)
        </dt>
        <dd class = "col-sm-10">
            @Html.DisplayFor(model => model.Device.Password)
        </dd>
        <dt class = "col-sm-2">
            @Html.DisplayNameFor(model => model.Device.Brand)
        </dt>
        <dd class = "col-sm-10">
            @Html.DisplayFor(model => model.Device.Brand)
        </dd>
        <dt class = "col-sm-2">
            @Html.DisplayNameFor(model => model.Device.DeviceModel)
        </dt>
        <dd class = "col-sm-10">
            @Html.DisplayFor(model => model.Device.DeviceModel)
        </dd>
        <dt class = "col-sm-2">
            @Html.DisplayNameFor(model => model.Device.DeviceType)
        </dt>
        <dd class = "col-sm-10">
            @Html.DisplayFor(model => model.Device.DeviceType)
        </dd>
        <dt class = "col-sm-2">
            @Html.DisplayNameFor(model => model.Device.DeviceIP)
        </dt>
        <dd class = "col-sm-10">
            @Html.DisplayFor(model => model.Device.DeviceIP)
        </dd>
    </dl>
</div>
<div>
    <a asp-page = "./Edit" asp-route-id = "@Model.Device?.DeviceID">Edit</a> |
    <a asp-page = "./Index">Back to List</a>
</div>

Я знаю, что вопрос глупый, но может ли кто-нибудь предложить способ отобразить его в cshtml? Когда я гуглю свой глупый вопрос, все, что я получаю, это как получить IP-адрес пользователя.

какую ошибку вы получаете?

CodingMytra 12.10.2022 09:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что здесь происходит то, что @Html.DisplayFor не имеет шаблона отображения для IPAddress, поэтому возвращается к шаблону по умолчанию, который в конечном итоге не подходит для IP-адресов.

Обходной путь прост: Предоставьте явный шаблон отображения для IPAddress.

Один из способов сделать это:

  • Создайте файл с именем IPAddress.cshtml под Views/Shared/DisplayTemplates.
  • В этом файле укажите, как должны отображаться IP-адреса. Это может быть так же просто, как:
@model System.Net.IPAddress
@Model

(Примечание. Хотя приведенная выше ссылка относится к ASP.Net Core, я считаю, что процесс создания шаблона отображения в устаревшем ASP.Net почти, если не полностью, идентичен.)

Спасибо за ваш ответ, это именно то, что я ищу. Это действительно открывает новый мир.

Piscesky 20.10.2022 23:56

Другие вопросы по теме