Asp.net 4 свойства объекта класса устанавливаются в нуль при возврате для просмотра - PullRequest
0 голосов
/ 01 октября 2018

ASP.NET 4.5 MVC с использованием Razor

Здравствуйте, я младший разработчик, и я столкнулся с проблемой, когда все выглядит так, как будто оно должно работать, но мне, кажется, что-то не хватает.Я пытаюсь передать объект класса из контроллера в представление, которое используется для обновления записи базы данных для этого объекта.Моя модель, контроллер и вид:

Модель:

public class  Contract
{
    public int ID { get; set; }
    public string PartName { get; set; }
    public decimal PartPrice { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public string Notes { get; set; }
    public string CustomerNumber { get; set; }
}

Контроллер:

[HttpGet] //the code that genereates these parameters is next on the chopping block
    public ActionResult UpdateContractPricing(string customerNumber, string partNumber, decimal contractPrice, DateTime contractStart, DateTime contractEnd, string notes, int ID)

    {
        Contract currentContract = new Contract
        {
            ID = int.Parse(ID),
            PartName = partNumber,
            PartPrice = Decimal.Parse(contractPrice),
            StartDate = contractStart,
            EndDate = contractEnd,
            CustomerNumber = customerNumber,
            Notes = notes
        };
        ViewBag.currentContract = currentContract;

        return View(new Contract());
    }

Вид (<p> теги для подтверждения):

@using NewWebApplication.Models
@model NewWebApplication.Models.Contract

@{ 
Contract con = new Contract();
con = (Contract)ViewBag.currentContract;
var tes = "";//for use as a breakpoint only}

<p>@con.ID</p>
<p>@con.CustomerNumber</p>
<p>@con.PartName</p>
<p>@con.PartPrice</p>
<p>@con.StartDate</p>
<p>@con.EndDate</p>
<p>@con.Notes</p>

В настоящее время происходит то, что объект currentContract успешно создается с правильной информацией, но как только он отсылается в представление, все, по-видимому, устанавливается равным нулю, и я получаю исключение System.ArgumentNullException.Я попытался передать объект в ViewBag и ViewData, но получить ту же ошибку.

VS 2015 выплевывает:

- Исключение типа 'System.ArgumentNullException' произошло в mscorlib.dll, но не было обработано в коде пользователя-Дополнительная информация: значение не может быть нулевым.

И Chrome выплевывает:

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

- Сведения об исключении: System.ArgumentNullException: значение не может быть нулевым.Имя параметра: String

Что меня смущает, так это то, что объект currentContract имеет все свои свойства, успешно установленные в ненулевое значение контроллером перед передачей в представление.Я что-то пропустил?Я где-то совершаю ошибку новичка?Почему представление действует так, как будто я посылаю ему объект, полный нулей?

Для справки, я следовал каждому из этих руководств до T безрезультатно:

Первый урок

Второй урок

Третий урок

РЕДАКТИРОВАТЬ 8/2: Я исправил вводмодель и контроллер.Я также попытался создать новый Контракт в представлении под названием con.con имеет все свои свойства, скопированные из данных viewbag, , которые являются правильными и не содержат нулей и всегда успешно копируются в con .Я по-прежнему получаю то же исключение ArgumentNullException для первого свойства @ con.property, которое я пытаюсь отобразить, независимо от того, какое из них я пытаюсь использовать или каково его значение.

1 Ответ

0 голосов
/ 01 октября 2018

возможно, что значения ID или PartPrice равны нулю.Вы можете попробовать это:

Contract currentContract = new Contract
    {
        ID = string.IsNullOrEmpty(ID) ? 0 : int.Parse(ID),
        PartName = partNumber,
        PartPrice = string.IsNullOrEmpty(contractPrice) ? 0 : 
        Decimal.Parse(contractPrice),
        StartDate = contractStart,
        EndDate = contractEnd,
        CustomerNumber = customerNumber,
        Notes = notes
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...