Ошибка значение не может быть неопределенным

  • Remove From My Forums

 locked

Удаление строки из таблицы

  • Вопрос

  • Есть таблица на главном представлении Index, в конроллере пытаюсь удалить запись из таблицы, при этом ошибок не возникает, но  при запуске и нажатии соответствующей кнопки, происходит ошибка. запись в контроллере:

     public ActionResult Delete(int kod)
            {
                Obsha9 kodfio = _db.Obsha9.Find(kod);
                if (kod != null)
                {
                    _db.Obsha9.Remove(kodfio);
                    _db.SaveChanges();
                }
                return RedirectToAction(«Index»);

    <<<<<<ОШИБКА

    Ошибка сервера в приложении ‘/’.


    Словарь параметров содержит запись со значением NULL для параметра «kod» типа «System.Int32», не допускающего значение NULL, для метода «System.Web.Mvc.ActionResult Delete(Int32)» в «ReitingTeacher.Controllers.HomeController».
    Необязательный параметр должен иметь ссылочный тип, тип, допускающий значение NULL, либо он должен быть объявлен как необязательный параметр.
    Имя параметра: parameters

    Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.

    Сведения об исключении: System.ArgumentException: Словарь параметров содержит запись со значением NULL для параметра «kod» типа «System.Int32», не допускающего значение NULL, для метода «System.Web.Mvc.ActionResult
    Delete(Int32)» в «ReitingTeacher.Controllers.HomeController». Необязательный параметр должен иметь ссылочный тип, тип, допускающий значение NULL, либо он должен быть объявлен как необязательный параметр.
    Имя параметра: parameters.

           

    • Изменено

      28 мая 2013 г. 13:58

Ответы

  • Ну развезли тут цирк))

    1 посмотри в свой роутинг — там скорее всего увидишь чтото типа такого
    «{controller}/{action}/{id}»

    так вот id тут ключевое

    и у тебя передается в твой метод id=12345/*kod*/, а метод не принимает id а принимает kod

    соответственно либо тут исправь

    @Html.ActionLink(«Удалить», «Delete», new { kod= c.KodFIO }) и добавь роутинг с
    «{controller}/{action}/{kod

    либо тут исправь
    public ActionResult Delete(int id)
            {
                Obsha9 kodfio = _db.Obsha9.Find(id);
               // if (id != null)
               // {
                    _db.Obsha9.Remove(id);
                    _db.SaveChanges();
                //}
                return RedirectToAction(«Index»);


    P.S. с исправлением роутинга так неполучится
    «{controller}/{action}/{kod}» — конфликт пойдет c id
    в общем запомни что существует связь по именам которую нужно соблюдать — если в ссылке стоит id значит и в методе должен стоять id а не int yaSralNaEtoPravilo

    • Изменено
      stuhin
      31 мая 2013 г. 9:41
    • Предложено в качестве ответа
      Maksim MarinovMicrosoft contingent staff, Moderator
      3 июня 2013 г. 7:16
    • Помечено в качестве ответа
      Maksim MarinovMicrosoft contingent staff, Moderator
      4 июня 2013 г. 10:29

  • проблема решена проще чем ожидалось 

     public ActionResult Delete(int? kod1)
            {
                Obsha9 kod = _db.Obsha9.Find(kod1);
    
                if (kod != null)
                {
                    _db.Obsha9.Remove(kod);
                    _db.SaveChanges();
                }
                return RedirectToAction("Index");

    @Html.ActionLink("Удалить", "Delete", new { id= c.Kod, kod1=c.Kod})

    • Предложено в качестве ответа
      YatajgaModerator
      1 июня 2013 г. 7:09
    • Помечено в качестве ответа
      Maksim MarinovMicrosoft contingent staff, Moderator
      4 июня 2013 г. 10:29

Как исправить ошибку?

Как исправить ошибку?

System.ArgumentNullException: "Значение не может быть неопределенным. Имя параметра: entity"

WPF форма содержащая 8 текст боксов

<StackPanel Grid.Column="2">
        <TextBox  Margin="5" Width="100" Text="{Binding SelectedOrder.КодЗаказа}" FontSize="16" FontWeight="Normal" FontStyle="Normal"/>
        <TextBox Margin="10" Width="100" Text="{Binding SelectedOrder.КодКлиента}" FontSize="16" FontWeight="Normal" FontStyle="Normal"/>
        <TextBox Margin="10" Width="100" Text="{Binding SelectedOrder.КодМаршрута}" FontSize="16" FontWeight="Normal" FontStyle="Normal"/>
        <TextBox Margin="10" Width="100" Text="{Binding SelectedOrder.КодВодителя}" FontSize="16" FontWeight="Normal" FontStyle="Normal"/>
        <TextBox Margin="10" Width="100" Text="{Binding SelectedOrder.КодТС}" FontSize="16" FontWeight="Normal" FontStyle="Normal"/>
        <TextBox Margin="10" Width="100" Text="{Binding SelectedOrder.Дата}" FontSize="16" FontWeight="Normal" FontStyle="Normal"/>
        <TextBox Margin="10" Width="100" Text="{Binding SelectedOrder.ДатаНачала}" FontSize="16" FontWeight="Normal" FontStyle="Normal"/>
        <TextBox Margin="10" Width="100" Text="{Binding SelectedOrder.ДатаОкончания}" FontSize="16" FontWeight="Normal" FontStyle="Normal"/>
        <Button Margin="50" Width="100" Content="Создать"
                Command="{Binding AddCommand}"
                
                />

    </StackPanel>

класс ViewModel, который реализует передачу данных из представления в модель

public class OrderViewModel : INotifyPropertyChanged
{
    private ObservableCollection<Заказ> orderList; //список записей в таблице Заказ
    private Заказ selectedOrder; //конкретный запись в Заказ
    private TransportCompanyEntities transportCompanyEntities; // контекст? 

    public Заказ SelectedOrder
    {
        get { return selectedOrder; }
        set
        {
            selectedOrder = value;
            OnPropertyChanged(nameof(SelectedOrder));
        }

    }

    public ObservableCollection<Заказ> OrderList
    {
        get { return orderList; }
        set
        {
            orderList = value; 
            OnPropertyChanged(nameof(OrderList));
        }
    }

    public OrderViewModel()
    {
        transportCompanyEntities = new TransportCompanyEntities();
        LoadOrders();
    }

    private void LoadOrders()
    {
        OrderList = new ObservableCollection<Заказ>(transportCompanyEntities.Заказ);
    }

    private RelayCommand addCommand;
    public RelayCommand AddCommand
    {
        get
        {
            return addCommand ??
              (addCommand = new RelayCommand(obj =>
              {
                  transportCompanyEntities.Заказ.Add(SelectedOrder);
                  transportCompanyEntities.SaveChanges();
              }));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    
}
public class RelayCommand{}

Ошибка:

System.ArgumentNullException: "Значение не может быть неопределенным. Имя параметра: entity"


  • Вопрос задан

    более года назад

  • 897 просмотров

Пригласить эксперта

Значение не может быть неопределенным. Имя параметра: entity

Не оставлять entity неопределённым. Или использовать значение по-умолчанию, или разрешить быть неопределённым.


  • Показать ещё
    Загружается…

13 июн. 2023, в 22:21

10000 руб./за проект

13 июн. 2023, в 21:59

2000 руб./за проект

13 июн. 2023, в 20:23

5000 руб./за проект

Минуточку внимания

DioxiT

0 / 0 / 0

Регистрация: 11.12.2018

Сообщений: 32

1

.NET 4.x

22.10.2019, 23:18. Показов 6763. Ответов 6

Метки list, list<>, string (Все метки)


Студворк — интернет-сервис помощи студентам

Не могу понять, как правильно взаимодействовать со списком, предполагаю, что я его как-то не так инициализирую. Ибо в отладчике service все время стоит со значением null.
При любом обращении к списку в программе выдает «Значение не может быть неопределенным».
Кстати, если вместо service.ElementAt(0) писать service[0] выдает немного иную ошибку «Ссылка на объект не указывает на экземпляр объекта». Разве я не могу обращаться к списку как к массиву?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public partial class Form1 : Form
    {
        public List<string> service;
        public Form1()
        {
            InitializeComponent();
            List<string> service = new List<string>() { "C", "CALL", "CHARACTER", "DIMENSION", "END", "FUNCTION", "GOTO", "IF", "INTEGER", "PROGRAM", "REAL", "STOP", "SUBROUTINE" };
        }
 private void buttonStep_Click(object sender, EventArgs e)
        {
            MessageBox.Show(service.ElementAt(0));
        }
   }

Заранее благодарю за любую помощь!



0



Arthur Progy

251 / 167 / 94

Регистрация: 16.09.2019

Сообщений: 457

22.10.2019, 23:20

2

Лучший ответ Сообщение было отмечено DioxiT как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public partial class Form1 : Form
    {
        public List<string> service;
        public Form1()
        {
            InitializeComponent();
            service = new List<string>() { "C", "CALL", "CHARACTER", "DIMENSION", "END", "FUNCTION", "GOTO", "IF", "INTEGER", "PROGRAM", "REAL", "STOP", "SUBROUTINE" };
        }
 private void buttonStep_Click(object sender, EventArgs e)
        {
            MessageBox.Show(service.ElementAt(0));
        }
   }



1



DioxiT

0 / 0 / 0

Регистрация: 11.12.2018

Сообщений: 32

22.10.2019, 23:28

 [ТС]

3

Спасибо большое. Ответ оказался прямо на поверхности)
Но все же, я не понимаю, почему тот способ объявления не работает, ведь его же используют даже в документации от майкрософт:

C#
1
2
// Create a list of parts.
        List<Part> parts = new List<Part>();

Что-то я не догоняю…



0



251 / 167 / 94

Регистрация: 16.09.2019

Сообщений: 457

22.10.2019, 23:34

4

DioxiT, Ссылку можете скинуть на документацию?



0



0 / 0 / 0

Регистрация: 11.12.2018

Сообщений: 32

22.10.2019, 23:35

 [ТС]

5



0



Arthur Progy

251 / 167 / 94

Регистрация: 16.09.2019

Сообщений: 457

22.10.2019, 23:38

6

DioxiT, смотрите, в документации лист создается в методе, а не в классе через конструктор.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Program
    {
        public static void Main()
        {
            List<int> test = new List<int>();//в методе
 
            Console.ReadKey(true);
        }
    }
 
    public class Test
    {
        public List<int> test;
        public Test()
        {
            test = new List<int>();//в классе через конструктор
        }
    }



1



jester

351 / 246 / 76

Регистрация: 18.03.2016

Сообщений: 979

23.10.2019, 01:47

7

Arthur Progy,

Цитата
Сообщение от Arthur Progy
Посмотреть сообщение

DioxiT, смотрите, в документации лист создается в методе, а не в классе через конструктор.

и что?
вот кусок его кода

Цитата
Сообщение от DioxiT
Посмотреть сообщение

C#
1
2
3
4
5
6
public List<string> service;
* * * * public Form1()
* * * * {
* * * * * * InitializeComponent();
* * * * * * List<string> service = new List<string>() { "C", "CALL", "CHARACTER", "DIMENSION", "END", "FUNCTION", "GOTO", "IF", "INTEGER", "PROGRAM", "REAL", "STOP", "SUBROUTINE" };
* * * * }

он создал глобальный service и поэтому может к нему обращаться из других методов(и вызывать ошибки)
а в конструкторе он создал локальную переменную service и ей присвоил элементы
глобальная переменная пустая



0



Форум КриптоПро
 » 
Средства криптографической защиты информации
 » 
КриптоПро .NET
 » 
Ошибка с сообщением «Значение не может быть неопределенным. Имя параметра: gost»


Offline

kmi

 


#1
Оставлено
:

4 марта 2019 г. 15:55:41(UTC)

kmi

Статус: Активный участник

Группы: Участники

Зарегистрирован: 18.12.2012(UTC)
Сообщений: 49
Откуда: Москва

Сказал(а) «Спасибо»: 8 раз

Добрый день!

Помогите, пожалуйста, разобраться с проблемой.

Есть клиент WCF-сервиса. Используется WS-security. При соединении проверяем сертификат сервера. Если запускаем из-под Visual Studio, то подключение работает. Но если запускаем сам exe-файл без студии, то возникает ошибка:

Цитата:

Message: Значение не может быть неопределенным.
Имя параметра: gost

Exception:

System.ArgumentNullException: Значение не может быть неопределенным.
Имя параметра: gost

Server stack trace:
в CryptoPro.Sharpei.Xml.CPEncryptedXml.EncryptKey(Gost28147 simm, Gost3410_2012_256 gost)
в CryptoPro.Sharpei.ServiceModel.CPSymmetricSecurityProtocol.CreateWrappedKeyToken(SecurityToken wrappingToken, SecurityTokenParameters wrappingTokenParameters, SecurityTokenReferenceStyle wrappingTokenReferenceStyle)
в System.ServiceModel.Security.SymmetricSecurityProtocol.GetInitiatorToken(SecurityToken providerToken, Message message, TimeSpan timeout, SecurityTokenParameters& tokenParameters, SecurityToken& prerequisiteWrappingToken)
в System.ServiceModel.Security.SymmetricSecurityProtocol.TryGetTokenSynchronouslyForOutgoingSecurity(Message message, SecurityProtocolCorrelationState correlationState, Boolean isBlockingCall, TimeSpan timeout, SecurityToken& token, SecurityTokenParameters& tokenParameters, SecurityToken& prerequisiteWrappingToken, IList`1& supportingTokens, SecurityProtocolCorrelationState& newCorrelationState)
в System.ServiceModel.Security.SymmetricSecurityProtocol.SecureOutgoingMessageCore(Message& message, TimeSpan timeout, SecurityProtocolCorrelationState correlationState)
в System.ServiceModel.Security.MessageSecurityProtocol.SecureOutgoingMessage(Message& message, TimeSpan timeout, SecurityProtocolCorrelationState correlationState)
в System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)
в System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.DoOperation(SecuritySessionOperation operation, EndpointAddress target, Uri via, SecurityToken currentToken, TimeSpan timeout)
в System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.GetTokenCore(TimeSpan timeout)
в CryptoPro.Sharpei.ServiceModel.CPSecuritySessionSecurityTokenProvider.GetTokenCore(TimeSpan timeout)
в System.IdentityModel.Selectors.SecurityTokenProvider.GetToken(TimeSpan timeout)
в System.ServiceModel.Security.SecuritySessionClientSettings`1.ClientSecuritySessionChannel.OnOpen(TimeSpan timeout)
в System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
в System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
в System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
в System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout)
в System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade)
в System.ServiceModel.Channels.ServiceChannel.EnsureOpened(TimeSpan timeout)
в System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
в System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:
в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
в Web.Api.Client.PersonalApiService.IPersonalApiService.TestAuthentication()
в Web.Api.Client.Logic.DataProvider.TestAuthentication() в C:Web.Api.ClientLogicDataProvider.cs:строка 29
в Web.Api.Client.ViewModels.AuthenticationViewModel.<Login>b__29_0() в C:Web.Api.ClientViewModelsAuthenticationViewModel.cs:строка 223

Биндинг прописан так:

Цитата:

<wsHttpBinding>
<binding name=»wsHttpUserNameBinding» closeTimeout=»01:00:00″ openTimeout=»01:00:00″ receiveTimeout=»01:00:00″ sendTimeout=»01:00:00″ maxBufferPoolSize=»2147483647″ maxReceivedMessageSize=»2147483647″>
<readerQuotas maxStringContentLength=»2147483647″ />
<security>
<transport clientCredentialType=»None» />
<message clientCredentialType=»UserName» negotiateServiceCredential=»false» />
</security>
</binding>
</wsHttpBinding>

И эндпоинт:

Цитата:

<client>
<endpoint address=»http://10.32.201.141:8499/PersonalApi/PersonalApiService.svc/ByUserName» binding=»wsHttpBinding» bindingConfiguration=»wsHttpUserNameBinding» contract=»PersonalApiService.IPersonalApiService» name=»wsHttpUserNameEndpoint»>
<identity>
<certificateReference findValue=»7c 00 00 1e f3 5b 00 35 35 1b 7e f3 98 00 01 00 00 1e f3″ x509FindType=»FindBySerialNumber» storeLocation=»LocalMachine» storeName=»My» />
</identity>
</endpoint>
</client>

Стоит CSP 4.0.9944 и КП .NET 1.0.6893.0


Вверх

WWW


Offline

Артём Макаров

 


#2
Оставлено
:

5 марта 2019 г. 9:14:30(UTC)

Артём Макаров

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 20.02.2017(UTC)
Сообщений: 197

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 54 раз в 53 постах

Добрый день.

Какая версия .NET Framework используется?

Если используется Криптопро.NET SDK совпадает ли версия SDK с версией устновленной Криптопро.NET?

Можно ещё попробовать явно указать algorithmSuite в байндинге:

Код:

<message clientCredentialType="UserName" negotiateServiceCredential="false" algorithmSuite="BasicGost2012_256" />

Техническую поддержку оказываем тут
Наша база знаний


Вверх


Offline

kmi

 


#3
Оставлено
:

5 марта 2019 г. 15:48:30(UTC)

kmi

Статус: Активный участник

Группы: Участники

Зарегистрирован: 18.12.2012(UTC)
Сообщений: 49
Откуда: Москва

Сказал(а) «Спасибо»: 8 раз

Помогло это: https://www.cryptopro.ru…ts&m=95154#post95154


Вверх

WWW

Пользователи, просматривающие эту тему

Guest

Форум КриптоПро
 » 
Средства криптографической защиты информации
 » 
КриптоПро .NET
 » 
Ошибка с сообщением «Значение не может быть неопределенным. Имя параметра: gost»

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

Одной из частых ошибок, с которой сталкиваются разработчики при создании программного обеспечения, является ошибка «Значение не может быть неопределенным. Имя параметра: item». Данная ошибка может возникать при работе с массивами, списках и других коллекциях данных.

Причиной возникновения ошибки может быть попытка обратиться к несуществующему элементу коллекции. Например, если массив содержит 10 элементов, а программа пытается обратиться к 11-му элементу, то возникает ошибка «Значение не может быть неопределенным. Имя параметра: item». Также ошибка может возникать из-за передачи неверных параметров при вызове методов.

Ошибку можно исправить путем добавления проверок на наличие элемента в коллекции перед обращением к нему. Например, можно использовать условие if для проверки длины списка или массива.

Пример кода:

list = [1, 2, 3]
if len(list) >= 4:
    print(list[3])
else:
    print("Нет элемента с индексом 3")

Также возможной причиной ошибки может быть использование нулевых значений в качестве параметров методов. В этом случае необходимо проводить дополнительные проверки при выполнении методов.

В заключение, ошибка «Значение не может быть неопределенным. Имя параметра: item» является довольно распространенной и может возникать при работе с коллекциями данных. Ее причины могут быть связаны как с ошибками в коде, так и с передачей неверных параметров при вызове методов. Однако исправить ее можно путем добавления проверок на наличие элементов в коллекции.

Понравилась статья? Поделить с друзьями:
  • Ошибка и ее уголовно правовое значение курсовая работа
  • Ошибка значение не должно быть пустым
  • Ошибка значение не было найдено в справочнике
  • Ошибка и ее уголовно правовое значение кратко
  • Ошибка и ее значение шпаргалка