Я хочу просмотреть данные двух таблиц с именами: Nvram и ExecOut.
** Нврам: **
using Newtonsoft.Json;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace SmartRouter.Domain
{
public class Nvram
{
[Key, ForeignKey("SRouter")]
public int NvramId { get; set; }
[JsonProperty("wanConnectionMode")]
public string ConnectionType { get; set; }
[JsonProperty("WAN_MAC_ADDR")]
public string IConfigMacAddress { get; set; }
[JsonProperty("lan_gateway")]
public string DefaultGateway { get; set; }
[JsonProperty("wan_dhcp_hn")]
public string HostName { get; set; }
[JsonProperty("macCloneEnabled")]
public string MacCloneEnable { get; set; }
[JsonProperty("macCloneMac")]
public string MacCloneMac { get; set; }
[JsonProperty("wan_pppoe_user")]
public string Username { get; set; }
[JsonProperty("wan_pppoe_pass")]
public string Password { get; set; }
[JsonProperty("wan_pppoe_optime")]
public string WanOperationMode { get; set; }
[JsonProperty("wan_ipaddr")]
public string WanIPAddress { get; set; }
[JsonProperty("wan_netmask")]
public string WanSubnetNetmask { get; set; }
[JsonProperty("wan_gateway")]
public string WanGatewayIP { get; set; }
[JsonProperty("wan_primary_dns")]
public string WanDNS1 { get; set; }
[JsonProperty("wan_secondary_dns")]
public string WanDNS2 { get; set; }
[JsonProperty("lan_ipaddr")]
public string LanIPAddress { get; set; }
[JsonProperty("lan_netmask")]
public string LanSubnetNetmask { get; set; }
[JsonProperty("dhcpEnabled")]
public bool? DHCPEnabled { get; set; }
[JsonProperty("dhcpStart")]
public string DHCPStart { get; set; }
[JsonProperty("dhcpEnd")]
public string DHCPEnd { get; set; }
[JsonProperty("dhcpMask")]
public string DHCPSubnetMask { get; set; }
[JsonProperty("dhcpPriDns")]
public string DHCPDNSPrimary { get; set; }
[JsonProperty("dhcpSecDns")]
public string DHCPDNSSecondary { get; set; }
[JsonProperty("dhcpGateway")]
public string DHCPGateway { get; set; }
[JsonProperty("dhcpLease")]
public string DHCPLeaseTime { get; set; }
[JsonProperty("upnpEnabled")]
public bool? UPnP { get; set; }
[JsonProperty("radvdEnabled")]
public bool? RouterAdvertisement { get; set; }
[JsonProperty("WiFiOff")]
public bool? WiFiOnOff { get; set; }
[JsonProperty("WirelessMode")]
public string NetworkMode { get; set; }
[JsonProperty("SSID1")]
public string SSID { get; set; }
[JsonProperty("HideSSID")]
public bool? BroadcastSSID { get; set; }
[JsonProperty("NoForwardingBTNBSSID")]
public bool? APIsolation { get; set; }
[JsonProperty("Channel")]
public int? Channel { get; set; }
[JsonProperty("AutoChannelSelect")]
public bool? AutomaticChannelSelection { get; set; }
[JsonProperty("BGProtection")]
public int? BGProtection { get; set; }
[JsonProperty("BeaconPeriod")]
public int? BeaconPeriod { get; set; }
[JsonProperty("DtimPeriod")]
public int? DTIMPeriod { get; set; }
[JsonProperty("FragThreshold")]
public string FragmentThreshold { get; set; }
[JsonProperty("RTSThreshold")]
public int? RTSThreshold { get; set; }
[JsonProperty("TxPreamble")]
public bool? EnablePeramble { get; set; }
[JsonProperty("wmm_capable")]
public bool? WMMEnabled { get; set; }
[JsonProperty("APSDCapable")]
public bool? EnableAPSD { get; set; }
[JsonProperty("DLSCapable")]
public bool? EnableDLS { get; set; }
[JsonProperty("AuthMode")]
public string SecurityMode { get; set; }
[JsonProperty("EncrypType")]
public string WPAAlgorithm { get; set; }
[JsonProperty("WPAPSK1")]
public string SecurityPassword { get; set; }
[JsonProperty("Rekeyinterval")]
public long? KeyRenewalinterval { get; set; }
[Required]
public virtual SRouter SRouter { get; set; }
}
}
** ExecOut: **
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SmartRouter.Domain
{
public class ExecOut
{
[Key, ForeignKey("SRouter")]
public int ExeOutId { get; set; }
[JsonProperty("uname -sv")]
public string BuildInfo{get;set;}
[JsonProperty("uptime")]
public string Uptime { get; set; }
[JsonProperty("web 2860 sys wanIpAddr")]
public string WANIPAddress { get; set; }
[JsonProperty("web 2860 sys wanNetmask")]
public string SubnetMask { get; set; }
[JsonProperty("web 2860 sys wanGateway")]
public string DefaultGateway { get; set; }
[JsonProperty("web 2860 sys dns1")]
public string PrimaryDNS { get; set; }
[JsonProperty("web 2860 sys dns2")]
public string SecondaryDNS { get; set; }
[JsonProperty("eth_mac r lan")]
public string LanMacAddress { get; set; }
[JsonProperty("web 2860 sys dhcpClientList")]
public string DHCPClientList { get; set; }
[JsonProperty("web 2860 sys wanMacAddr")]
public string WanMacAddr { get; set; }
[Required]
public virtual SRouter SRouter { get; set; }
}
}
Для извлечения данных из двух таблиц я создал следующий репозиторий:
using SmartRouter.Domain;
using SmartRouter.Persistance.Facade;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SmartRouter.Persistance.Repositories
{
public class RouterInfoRepository : IRouterInfoRepository
{
private readonly RouterDBContext _srdbcontext;
public RouterInfoRepository(RouterDBContext srdbcontext)
{
_srdbcontext = srdbcontext;
}
public dynamic GetRouterStatusByMac(string macAddress)
{
var nvramdata=_srdbcontext.Nvrams.Where(q => q.SRouter.MacAddress == macAddress).Select(s => new
{
s.ConnectionType,
s.IConfigMacAddress,
s.LanIPAddress,
s.LanSubnetNetmask,
s.DefaultGateway
}).FirstOrDefault();
var execdata = _srdbcontext.ExeOuts.Where(q => q.SRouter.MacAddress == macAddress).Select(e => new
{
e.BuildInfo,
e.Uptime,
e.WANIPAddress,
e.SubnetMask,
e.DefaultGateway,
e.PrimaryDNS,
e.SecondaryDNS,
e.LanMacAddress
}).FirstOrDefault();
return new
{
nvramdata.ConnectionType,
nvramdata.IConfigMacAddress,
nvramdata.LanIPAddress,
nvramdata.LanSubnetNetmask,
nvramDefaltGateway = nvramdata.DefaultGateway,
execdata.BuildInfo,
execdata.Uptime,
execdata.WANIPAddress,
execdata.SubnetMask,
exeDefaultGateway = execdata.DefaultGateway,
execdata.PrimaryDNS,
execdata.SecondaryDNS,
execdata.LanMacAddress
};
//return result;
}
}
}
В приведенной выше функции я беру некоторые параметры из Nvram и некоторые параметры из ExecOut.
И, наконец, я использую функцию этого хранилища внутри RouterController
public ActionResult Status()
{
using (RouterUnitOfWork uow = new RouterUnitOfWork())
{
IRouterInfoRepository routerrepository = new RouterInfoRepository(uow.CurrentObjectContext);
ViewBag.routerinfodata = routerrepository.GetRouterStatusByMac("f8:b5:68:a0:10:1c");
//var routerdata = new RouterStatusViewModel();
//routerdata.ConnectionType=routerinfodata.ConnectionType;
return View();
}
}
Когда я пытаюсь напечатать значение в виде, как:
<td>@ViewBag.routerinfodata.ConnectionType</td>
Я получаю следующую ошибку:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: ''object' does not contain a definition for 'ConnectionType''
Еще одна путаница:
Я также делаю модель вида для выбранных параметров (из Nvram и ExecOut) следующим образом:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace RouterManagement.Models
{
public class RouterStatusViewModel
{
public string BuildInfo { get; set; }
public string Uptime { get; set; }
public string ConnectionType { get; set; }
public string WANIPAddress { get; set; }
public string SubnetMask { get; set; }
public string ExecDefaultGateway { get; set; }
public string PrimaryDNS { get; set; }
public string SecondaryDNS { get; set; }
public string IConfigMacAddress { get; set; }
public string LanIPAddress { get; set; }
public string LanSubnetNetmask { get; set; }
public string NvramDefaultGateway { get; set; }
public string LanMacAddress { get; set; }
}
}
Вышеуказанное задание, за которым я следую, следует инструкциям. Поскольку я новичок, я просто продолжаю и пытаюсь понять каждый шаг, который я сделал. Все понятно, кроме просмотра модели. Я не вижу использования модели представления. Разве мой подход не был правильным? Я очень благодарен вашей поддержке начинающего разработчика ASP.NET. Заранее спасибо.