Как исправить это NullReferenceException: ссылка на объект не установлена ​​на экземпляр ошибки объекта, когда я пытаюсь отобразить элементы из базы данных в ddl - PullRequest
0 голосов
/ 28 ноября 2018

Это мой вид для выпадающего списка, который должен быть заполнен значениями в RenewMember.

@model RenewMember
@{
ViewData["Title"] = "Membership Renewal";
Layout = "~/Views/Shared/_Layout.cshtml";

string msg = ViewData["msg"] as string;


var cat = ViewData["prices"] as List<dynamic>;
    cat.Insert(0, new { value = "0", text = "---Select---" });

@section ScriptSection {
    <script>
        function DisplayPrice() {
            var price1yearmember = 100;
            var rate = 1;
            var subtotal = 0;
            if (selectedCurrency == "USD") {
                subtotal = price1yearmember * rateUSD;
            }
            else if (selectedCurrency == "MYR") {
                subtotal = price1yearmember * rateMYR;
            }
            else if (selectedCurrency == "SGD") {
                subtotal = price1yearmember * rate;
            }
            $("#txtPrice").val(subtotal.toFixed(2));
        }         
         /**   $('#edit').click(function() {
                $('#YearlyRate').prop('readonly', false);
             });**/

    </script>
}

}

<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Contact Us</title>
<link href="~/lib/bootstrap/dist/css/bootstrap.css" rel="stylesheet" />
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.min.js"></script>
<link href="~/lib/eonasdan-bootstrap-datetimepicker/build/css/bootstrap- 
datetimepicker.min.css" rel="stylesheet" />
<script src="~/lib/moment/min/moment.min.js"></script>
<script src="~/lib/eonasdan-bootstrap-datetimepicker/build/js/bootstrap- 
datetimepicker.min.js"></script>
<script type='text/javascript' src='https://www.google.com/recaptcha/api.js? 
onload=recaptchaCallback&#038;render=explicit&#038;ver=2.0'></script>

<style>
    .input-group-addon {
        cursor: pointer;
    }

    #BsDateTimePicker {
        cursor: pointer;
    }
</style>
<script type="text/javascript">
    $(function () {
        $('#BsDateTimePicker').datetimepicker({
            format: 'YYYY-MM-DD'
        });
    });
</script>
<script src="~/lib/jquery-validation/src/core.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"> 
</script>
<meta charset="utf-8" />
<title>Contact Us</title>
<style type="text/css">
    #head {
        font-family: 'Times New Roman', Times, serif;
        font-style: oblique;
        font-size: larger;
        text-align: center;
        color: black;
        will-change: contents;
        font-weight: 900;
    }

    #late {
        font-family: 'Times New Roman', Times, serif;
        font-style: italic;
        font-size: larger;
        text-align: center;
        color: black;
        will-change: contents;
    }

    .field-validation-error {
        font-weight: bold;
        color: red;
        /*background-color: yellow;*/
        font-family: 'Times New Roman', Times, serif;
        font-style: unset;
        font-size: medium;
    }

    .validation-summary-errors {
        border: 2px dashed red;
        color: red;
        /*background-color: yellow;*/
        font-weight: bold;
        margin: 12px;
    }
</style>
</head>

<form class="form-horizontal" asp-action="Index">


    <div class="form-group">
        <label class="control-label col-sm-3" asp-for="Email">Email : </label>
        <div class="col-sm-5">
            <input asp-for="Email" class="form-control" />
        </div>
        <div class="has-error">
            <span asp-validation-for="Email" class="text-danger"></span>
        </div>
    </div>

    <div class="form-group">
        <label asp-for="Id" class="col-sm-4 control-label">Duration : </label>
        <div class="col-sm-6">
            <select id="ddlPrices" class="form-control col-sm-6" asp-for="Id">
                @foreach (var item in cat)
                {
                    <option value="@item.value">@item.text</option>

                }
            </select>
        </div>
        <div class="has-error">
            <span asp-validation-for="Id" class="text-danger"></span>
        </div>
    </div>

    <div class="form-group">
        <label class="col-sm-3 control-label">Price: </label>
        <div class="col-sm-6" style="padding-right:15px;">
            <input id="txtPrice" class="form-control" value="-" readonly disabled 
   style="background-color:#C0C0C0" />
        </div>
        <div class="col-sm-1" style="padding-left:0">
            @{
                Html.RenderPartial("_CurrencySelector");
            }
        </div>
    </div>

                }

@if (User.IsInRole("Admin") || User.IsInRole("SuperUser"))
{
<div class="form-group">
    <div class="col-sm-offset-3 col-sm-6">
        <input type="submit" class="btn btn-primary" value="Save" />
    </div>
</div>
}
else  
{
<div class="form-group">
    <div class="col-sm-offset-3 col-sm-6">
        <input type="submit" class="btn btn-primary" value="Renew" />
    </div>
</div>

}


</form>

Вот для него контроллер

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using PSS.Models;
using System.Security.Claims;
using System.Data;  
using Microsoft.EntityFrameworkCore;
using System.Text;
using System.Threading;
using System.Net.Mail;
using System.Net;
using System.Web;
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using MimeKit;
using static System.Net.Mime.MediaTypeNames;
using MailKit.Net.Smtp;
using System.Linq.Dynamic;
using Microsoft.AspNetCore.Authorization;
using System.Dynamic;

namespace PSS.Controllers
{
public class RenewMemberController : Controller
{
    private AppDbContext _dbContext;

    public RenewMemberController(AppDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public IActionResult Index()
    {
        DbSet<RenewMember> dbs = _dbContext.RenewMember;
        List<RenewMember> model = dbs.ToList();
        return View(model);
    }

    public IActionResult DisplayPrice()
    {
        DbSet<RenewMember> dbs = _dbContext.RenewMember;
        var lstPrices =
            dbs.ToList<RenewMember>()
               .OrderBy(p => p.Id)
               .Select(
                   p =>
                   {
                       dynamic d = new ExpandoObject();
                       d.value = p.Id;
                       d.text = p.DisplayPrice;
                       return d;
                   }
               )
               .ToList<dynamic>();
        ViewData["prices"] = lstPrices;

        return View();
    }

}
}

Модель:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;

namespace PSS.Models
{

public class RenewMember
{
    public int Id { get; set; }

    [DataType(DataType.EmailAddress)]
    [Required(ErrorMessage = "Required Field")]
    public string Email { get; set; }

    public string Duration { get; set; }

    public float Rate { get; set; }

    public string DisplayPrice { get; set; }

    public float Price { get; set; }

    public string Currency { get; set; }

    public float CurrencyRate { get; set; }
}
}

Как мне исправить эту ошибку?Моя цель здесь состоит в том, чтобы отобразить элементы из столбца базы данных под названием «DisplayPrice».Мне нужно будет разрешить роли администратора иметь возможность редактировать выпадающий список / базу данных позже, чтобы ее нельзя было жестко запрограммировать.

Ошибка, которую она выделила, была строкой 10 моих просмотров

cat.Insert(0, new { value = "0", text = "---Select---" });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...