Я только начал изучать страницу бритвы 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-адрес пользователя.





Я думаю, что здесь происходит то, что @Html.DisplayFor не имеет шаблона отображения для IPAddress, поэтому возвращается к шаблону по умолчанию, который в конечном итоге не подходит для IP-адресов.
Обходной путь прост: Предоставьте явный шаблон отображения для IPAddress.
Один из способов сделать это:
IPAddress.cshtml под Views/Shared/DisplayTemplates.@model System.Net.IPAddress
@Model
(Примечание. Хотя приведенная выше ссылка относится к ASP.Net Core, я считаю, что процесс создания шаблона отображения в устаревшем ASP.Net почти, если не полностью, идентичен.)
Спасибо за ваш ответ, это именно то, что я ищу. Это действительно открывает новый мир.
какую ошибку вы получаете?