Не знаете как приступить к размещению данных модели в поле зрения MVC
Привет,
Я довольно новичок в MVC (On and Off user) и изо всех сил пытаюсь понять, как получить данные из модели в представление.
В моем контроллере у меня есть метод, который запускает следующий код:
var jsonClient = new WebClient(); jsonClient.Credentials = new NetworkCredential(ApiUsername.apiUsername, ApiPassword.apiPassword); jsonClient.Headers.Set("Content-Type", "application/json"); jsonClient.Headers.Set("Accept", "application/json"); //Engine Info var radWatchList = jsonClient.DownloadString("http://APIURL:XXXX/api/watchlists/Radiology/alerts/active"); var radAlertsToModel = JsonConvert.DeserializeObject<DashboardModel>(radWatchList).Data; return PartialView("~/Views/Radiology/RadPartialViews/RadiologyAlerts.cshtml"); }
Вот мой класс моделей
namespace Rhapsody_DashboardV6.Models { public class DashboardModel { [JsonProperty("data")] public Data Data { get; set; } [JsonProperty("error")] public object Error { get; set; } } public class Data { [JsonProperty("alertCount")] public long AlertCount { get; set; } [JsonProperty("highestSeverity")] public string HighestSeverity { get; set; } [JsonProperty("alerts")] public Alert[] Alerts { get; set; } } public partial class Alert { [JsonProperty("id")] public long Id { get; set; } [JsonProperty("alertName")] public string AlertName { get; set; } [JsonProperty("alertMnemonic")] public string AlertMnemonic { get; set; } [JsonProperty("alertDescription")] public string AlertDescription { get; set; } [JsonProperty("timestamp")] public string Timestamp { get; set; } [JsonProperty("state")] public string State { get; set; } [JsonProperty("severity")] public string Severity { get; set; } [JsonProperty("componentInfo")] public ComponentInfo ComponentInfo { get; set; } [JsonProperty("parameters")] public Parameter[] Parameters { get; set; } } public partial class ComponentInfo { [JsonProperty("id")] public long Id { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("folderPath")] public string FolderPath { get; set; } } public partial class Parameter { [JsonProperty("id")] public long Id { get; set; } [JsonProperty("displayName")] public string DisplayName { get; set; } [JsonProperty("value")] public string Value { get; set; } } }
Теперь если я поставлю точку останова на следующем фрагменте кода:
var radAlertsToModel = JsonConvert.DeserializeObject<DashboardModel>(radWatchList).Data;
Я вижу, что он правильно заполнил свойства модели всеми соответствующими ответами API. На данный момент я бы изначально использовал ViewBag, который отлично работает, однако, судя по чтению, Viewbag, похоже, довольно плохо принят сообществом MVC, и что я должен искать, чтобы сделать это через класс ViewModal.
Я хочу передать эти данные в частичное представление, так как у меня есть запущенный AJAX-скрипт, который обновляет частичное представление каждые 30 секунд, чтобы оно обновляло представление любыми новыми данными из API.
Это код в частичном представлении:
@model IEnumerable<Rhapsody_DashboardV6.Models.Alert> <div class="radAlertsMainPanel"> <div class="panel panel-default radAlertPanel"> <div class="panel-body"> <label>Active Alerts: </label> <div> @foreach (var item in Model) { @Html.DisplayFor(modelItem => item.Id); @Html.DisplayFor(modelItem => item.AlertDescription); @Html.DisplayFor(modelItem => item.AlertMnemonic); @Html.DisplayFor(modelItem => item.AlertName); } </div> </div> </div> </div>
И это тот вид, на который будет "встроен" частичный вид:
@{ ViewBag.Title = "Radiology Dashboard"; } @model Rhapsody_DashboardV6.Models.Alert <div id="radDashboard" class="radDashboard"> <div id="radTitle" class="radTitle"> <h1>Radiology Dashboard </h1> </div> </div> <div class="radIntStatDiv"> <div id="radIntStat" class="radIntTitle"> <h4>Interface Status</h4> </div> </div> <div class="grid"> <span class="grid-item" id="TEST1"></span> <span class="grid-item" id="TEST2"></span> <span class="grid-item" id="TEST3"></span> <span class="grid-item" id="TEST4"></span> <div> </div> </div> <div class="radAlertsDiv"> <div id="radAlerts"> <h4>Radiology Alerts</h4> </div> </div> <div class="radAlerts"> <div> <div id="RadiologyAlerts"></div> </div> </div> <div> <div> <div id="RadiologyInterfaceStatistics"></div> </div> </div> @Scripts.Render("~/Content/JavaScript/Radiology/radiologyPartialViews.js")
В консоли Google Chrome он просто указывает на ошибку 500 без дополнительной информации для этого частичного представления.
Я не уверен, какие следующие шаги мне нужно предпринять, чтобы получить эти данные в частичном представлении.
Если бы кто-нибудь мог указать мне правильное направление или дать несколько советов о том, что я делаю неправильно, это было бы очень ценно.
Большое Спасибо!
Что я уже пробовал:
Я просмотрел несколько страниц StackOverflow, а также следовал учебнику MVC по Microsoft, но потерпел неудачу.
Richard Deeming
Попробуйте переместить @model
директива в верхнюю часть частичного вида:
@model Rhapsody_DashboardV6.Models.Alert @{ ViewBag.Title = "Radiology Dashboard"; } ...
Если он все еще не работает, изучите запрос на панели network в инструментах разработки Chrome и посмотрите на ответ. Если вы тестируете на своем локальном компьютере, вы должны получить подробное сообщение об ошибке, которое расскажет вам, в чем проблема.