MVC View Model возвращает NULL - PullRequest
0 голосов
/ 10 мая 2019

Я создаю свое первое приложение MVC с задействованной структурой сущностей, но у меня возникла странная проблема.

Я просто создаю простое представление, в котором приводится Модель, содержащая некоторые основные результаты SQL SPно в качестве возвращаемого представления Модель возвращает значение NULL, поэтому выдает ошибку «Ссылка на объект».Ошибка не вызывает удивления, потому что, очевидно, если Model возвращает null, объект отсутствует, но я могу без проблем выполнить SP в SSMS и получить ожидаемые возвращаемые значения.

Вот мой код, если вы хотитесм .:

КОНТРОЛЛЕР

 public class ColorController : Controller
{

    public ActionResult Index()
    {
        ColorsMainEntities empdb = new ColorsMainEntities();

        return View(empdb.GetColors(0,""));
    }

    [HttpPost]
    public ActionResult Index(string customerName)
    {
        ColorsMainEntities empdb = new ColorsMainEntities();
        return View(empdb.GetColors(0,""));
    }
}

ПРОСМОТР

@model IEnumerable<Colors_Test.M_Colors>

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Colors</title>
</head>
<body>
    @using (Html.BeginForm("Index", "Color", FormMethod.Post))
    {
        <span>Customer Name:</span> @Html.TextBox("CustomerName")
        <input type="submit" value="Search" />
        <br />
       <br />
       <table cellpadding="0" cellspacing="0">
            <tr>
                <th>ID</th>
                <th>Color</th>
                <th>Category</th>
                <th>Type</th>
                <th>RGBA</th>
                <th>Hex</th>
            </tr>
            @foreach (M_Colors color in Model)
            {
        <tr>
            <td>@color.ColorID</td>
            <td>@color.Color</td>
            <td>@color.Category</td>
            <td>@color.Type</td>
            <td>@color.RGBA</td>
            <td>@color.Hex</td>
        </tr>
            }
        </table>
    }
</body>
</html>

SP

ALTER PROCEDURE [dbo].[GetColors] (@pnColorID INT = 0, @pcColor VARCHAR(999) = '')
AS
BEGIN
    IF(@pcColor <> '')
    BEGIN
        SELECT * FROM M_Colors WHERE Color LIKE '%' + @pcColor + '%'
    END
    ELSE
    BEGIN
        SELECT * FROM M_Colors
    END

END

EF Function Import

Любая помощь приветствуется, я довольно долго занимался этой отладкой.

Моя проблема в теории заключается в том, что платформа Entity возвращает ObjectResult вместо IEnumerable, но это приведет к ошибке в этом преобразовании.попытка.К сожалению, я не могу заставить свой код уровня контроллера достигать контрольных точек, поэтому я не могу это подтвердить.

1 Ответ

0 голосов
/ 10 мая 2019

Первый вызов будет состоять в том, чтобы отладить ваш собственный код и посмотреть, что происходит.Перестаньте делать один лайнер, как это:

return View(empdb.GetColors(0,""));

вместо этого, разделите код следующим образом:

var colors = empdb.GetColors(0,"");

//some extra checks here, decide what you do if there are no colors returns, 
//maybe return an empty list for example so you don't get null errors any more.

return View(colors);

, теперь вы можете поставить точку останова на линию цветов и посмотреть, что возвращает ваш репо,

Вы можете войти в код репо, чтобы увидеть, что происходит.Вы также можете сделать это с помощью своего кода, вы можете поставить точку останова в операторе return, и когда вы остановитесь там, снова войдите в код, однако это будет намного проще, если вы будете держаться подальше от этих неприятных строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...