2015-07-23 3 views
0

У меня есть модель и контроллер, который работает, но моя модель не показывает никаких данных внутри представления. Любые идеи о том, что я делаю неправильно?Получение данных для отображения в моем представлении

У меня есть одна модель, которую я пытаюсь передать с помощью пары переменных внутри нее.

Я пытаюсь использовать Html.ViewData.Model. (Имя переменной здесь). Я все равно получаю нулевое исключение, даже если у меня есть hardset значения в модели.

Любые идеи

Модель

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using Microsoft.AspNet.Identity; 
using Microsoft.Owin.Security; 


namespace stuff 
{ 
    public class BACnetModel 
    { 
     private string _rmNum = "Room Number"; 
     public string RmNum { get { return _rmNum; } set{_rmNum = value;} } 

     private string _avRes = "70"; 
     public string AvRes { get { return _avRes; } set {_avRes = value;} } 

     private string _bvRes = "T"; 
     public string BvRes { get { return _bvRes; } set { _bvRes = value; } } 

     private string _mvRes = "O"; 
     public string MvRes { get { return _mvRes; } set { _mvRes = value; } } 
    } 
} 

Контроллер

public class PEOController : Controller 
    { 

     //Set default values 
     private string AvResult = "90"; 
     private string BvResult = "T"; 
     private string MvResult = "O"; 
     private string rmNum = "Room"; 

     // GET: PEO 

     public ActionResult PEO(string BvResult, string AvResult, string MvResult, string rmNum) 
     { 

      var model = new BACnetModel 
      { 
       AvRes = AvResult, 
       BvRes = BvResult, 
       MvRes = MvResult, 
       RmNum = rmNum 
      }; 

      return View(model); 
     } 

     public ActionResult getRoomNumber(string roomNumber, ref uint BvInstance, ref uint AvInstance, ref uint MvInstance, out string rmNum) 
     { 
      switch (roomNumber) 
      { 
       case ("1B^1001^01"): 
        rmNum = "1B^1001^01"; 
        BvInstance = 3000018; 
        AvInstance = 3000022; 
        MvInstance = 3000040; 
        break; 

       case ("1B^1002^01"): 
        rmNum = "1B^1002^01"; 
        BvInstance = 3000020; 
        AvInstance = 3000023; 
        MvInstance = 3000042; 
        break; 

       default: 

        break; 
      } 
      rmNum = "Room"; 

      var model = new BACnetModel 
      { 
       AvRes = AvResult, 
       BvRes = BvResult, 
       MvRes = MvResult, 
       RmNum = rmNum 
      }; 


      return View(model); 
     } 

    } 

Посмотреть

@using Stuff 
@using Microsoft.Ajax.Utilities 
@model BACnetModel 

@{ 
    ViewBag.Title = ""; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2> Stuff(PEO)</h2> 
<p> 
    Stuff 
</p> 
<label>Select a Room: </label> 
<!-- I need to add Code that will loop through the database and provide rooms. 
     I will need to provide a query that will be called on page load.--> 

<form action="/PEO/getRoomNumber"> 
    <select id="roomList"> 
     <option value="1B^1001^01">1B^1001^01</option> 
     <option value="1B^1002^01">1B^1002^01</option> 
    </select><br/><br/> 

    <fieldset id="peoFieldset"> 
     <legend>Room Results</legend> 
     <label for="roomNumber">Room Number:</label> 
     <input id="roomNumber" readonly="readonly"/>@Html.ViewData.Model.RmNum<br> 
     <label for="rmSetpoint">Room Setpoint: </label> 
     <input id="rmSetpoint" readonly="readonly" />@Html.ViewData.Model.AvRes<br> 
     <label for="rmCode">Room Code: </label> 
     <input id="rmCode" readonly="readonly" />@Html.ViewData.Model.BvRes<br> 
     <label for="rmOcc">Room Occupancy: </label> 
     <input id="rmOcc" readonly="readonly" />@Html.ViewData.Model.MvRes<br> 
    </fieldset> 
</form> 

<label>Occupancy Value</label> 
<select id="occValue"> 
    <option value="Occupied">Occupied</option> 
    <option value="Unoccupied">Unoccupied</option> 
</select> 
+0

Ваше действие ожидает различные параметры, вы передаете их действию? Вы пытались отлаживать и видеть, где происходит исключение? –

+0

Да, я фактически перехожу к использованию хелпера формы. Я думаю, что проблема в том, что функция не называется должным образом. Мне нужно очистить функцию, которая кажется. – Phi

+1

Извините, что вы суров, но здесь нет смысла, в частности, ваш код просмотра (вы просто создаете произвольные входы, которые даже не имеют атрибутов «имя» и никогда не будут возвращать что-либо). Используйте сильно типизированные html-помощники, чтобы сгенерировать вам html, чтобы вы получили привязку двух сторон модели - @ Html.TextBoxFor (m => m.RmNum) 'и т. Д. –

ответ

1

Я не уверен, почему вы используете ViewData в вашем представлении. Вместо этого используйте стандартную привязку модели. На ваш взгляд:

<fieldset id="peoFieldset"> 
    <legend>Room Results</legend> 
    <label for="roomNumber">Room Number:</label> 
    <input id="roomNumber" readonly="readonly"/>@Model.RmNum<br> 
    <label for="rmSetpoint">Room Setpoint: </label> 
    <input id="rmSetpoint" readonly="readonly" />@Model.AvRes<br> 
    <label for="rmCode">Room Code: </label> 
    <input id="rmCode" readonly="readonly" />@Model.BvRes<br> 
    <label for="rmOcc">Room Occupancy: </label> 
    <input id="rmOcc" readonly="readonly" />@Model.MvRes<br> 
</fieldset> 
+0

Пробовал это изначально, и он не работал. Поразмыслив, просто продолжайте менять материал, пока что-то не работает: -D – Phi

-1

Я получил его на работу.

Сначала я создал экземпляр модели в контроллере вне любых методов.

private BACnetModel model = new BACnetModel(); 

Как только я это сделал, я затем задал значения модели и вернул их как часть метода действия.

public ActionResult PEO() 
     { 
      var Room1 = 
       new SelectListItem {Text = "1B^1001^01", Value = "1B^1001^01"}; 
      var Room2 = 
       new SelectListItem {Text = "1B^1002^01", Value = "1B^1002^01"}; 

      roomList.Add(Room1); 
      roomList.Add(Room2); 


      ViewBag.RoomList = new SelectList(roomList, "Text", "Value"); 

      model.RmNum = ""; 
      model.AvRes = ""; 
      model.BvRes = ""; 
      model.MvRes = ""; 


      return View(model); 
     } 

Затем я перешел к моему представлению и поместил значения модели в представление.

<fieldset id="peoFieldset"> 
     <legend>Room Results</legend> 
     <label for="roomNumber">Room Number:</label> 
     <input id="roomNumber" readonly="readonly" value="@Model.RmNum" /><br> 
     <label for="rmSetpoint">Room Setpoint: </label> 
     <input id="rmSetpoint" readonly="readonly" value="@Model.AvRes" /><br> 
     <label for="rmCode">Room Code: </label> 
     <input id="rmCode" readonly="readonly" value="@Model.BvRes" /><br> 
     <label for="rmOcc">Room Occupancy: </label> 
     <input id="rmOcc" readonly="readonly" value="@Model.MvRes" /><br> 
    </fieldset> 

Работает как очарование!

+0

_ «Работает как шарм» _ ** НЕ ** Вам нужно зайти на сайт MVC и проработать учебные пособия и попытаться понять основы. –

+0

На самом деле, он работает так же, как и мне. Так что да, это работает как шарм. :-D – Phi

+0

Нет, этого нет - вы, очевидно, даже не пытались отправить форму. Перейдите на сайт MVC и пройдите через учебные пособия. –

Смежные вопросы