【问题标题】:How to use DisplayFor to display IPAddress type?如何使用 DisplayFor 显示 IPAddress 类型?
【发布时间】:2022-10-14 22:22:36
【问题描述】:

我刚开始按照 Microsoft 教程学习 asp.net razor 页面。我正在尝试制作我的小 Web 应用程序来显示设备,并且每个设备都将包含一个 IPv4 地址。我正在使用 System.Net 在我的设备模型中包含 IPAddress,并使用 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 地址

【问题讨论】:

  • 你遇到了什么错误 ?

标签: c# asp.net razor


【解决方案1】:

我认为这里发生的事情是@Html.DisplayFor 没有IPAddress 的显示模板,因此退回到最终不适合IP 地址的默认模板。

解决方法很简单:ProvideIPAddress 的显式显示模板。

一种方法是:

  • Views/Shared/DisplayTemplates 下创建一个名为IPAddress.cshtml 的文件。
  • 在此文件中,定义您希望如何呈现 IP 地址。这可能很简单:
@model System.Net.IPAddress
@Model

(注意:虽然上面的链接是针对 ASP.Net Core 的,但我相信在旧版 ASP.Net 中创建显示模板的过程几乎是相同的,如果不完全相同的话。)

【讨论】:

    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2010-10-02
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    相关资源
    最近更新 更多