1

以下は、ドロップダウンリストを含む私のビューです。

@model CommerceSuite.Web.Models.RelocateStock.RelocateStockModel

@Html.ValidationSummary(true)

    <div class="editor-label">
        @Html.LabelFor(model => model.products)
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model=>model.ProductId,Model.products,"Select Product")<br />
        @Html.ValidationMessageFor(model => model.ProductId)
    </div>

これが私のモデルクラスです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.ComponentModel.DataAnnotations;
using CommerceSuite.Web.Models.LocationDetail;
using CommerceSuite.Web.Models.Product;

namespace CommerceSuite.Web.Models.RelocateStock
{
public class RelocateStockModel
{
    public RelocateStockModel()
    {
        products = new List<SelectListItem>();
        Fromlocations = new List<SelectListItem>();
        Tolocations = new List<SelectListItem>();
        product = new ProductModel();
        locationDetail = new LocationDetailModel();
    }

    [HiddenInput(DisplayValue = false)]
    public long ProductStockId { get; set; }

    public long ProductId { get; set; }

    [Display(Name = "Product Id")]
    [Required]
    public IList<SelectListItem> products { get; set; }

    public long LocationFromId { get; set; }

    [Display(Name = "Location From")]
    [Required]
    public IList<SelectListItem> Fromlocations { get; set; }


    public long LocationToId { get; set; }

    [Display(Name = "Location To")]
    [Required]
    public IList<SelectListItem> Tolocations { get; set; }

    [Display(Name="Quantity Shifted")]
    public long Quantity { get; set; }

    public LocationDetailModel locationDetail { get; set; }
    public ProductModel product { get; set; }

}
}

これが私のコントローラーです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CommerceSuite.Services;
using CommerceSuite.Web.Models.Product;
using CommerceSuite.Data.Models;
using CommerceSuite.Web.Models.RelocateStock;

namespace CommerceSuite.Web.Controllers
{

public class RelocateStockController : BaseCsController
{
    private readonly IProductService _product;
    private readonly ILocationDetailService _locationDetail;
    private readonly IProductStockService _productStock;

    public RelocateStockController(IProductService product, ILocationDetailService locationDetail, IProductStockService productStock)
    {
        this._productStock = productStock;
        this._product = product;
        this._locationDetail = locationDetail;
    }
    //
    // GET: /RelocateStock/

    private List<SelectListItem> PopulateProductId()
    {
        var productCollection = new SelectList(_product.GetAllProduct(), "ProductId", "Name").ToList();
        return productCollection;
    }

    private List<SelectListItem> PopulateLocation()
    {
        var locationCollection = new SelectList(_locationDetail.GetAllLocationDetail(), "LocationId", "Name").ToList();
        return locationCollection;
    }

    public ActionResult Index()
    {
        return PartialView("_RelocateStockView");
    }

    [HttpGet]
    public ActionResult StockRelocate()
    {
        var model = new RelocateStockModel();
        model.products = PopulateProductId();
        model.Fromlocations = PopulateLocation();
        model.Tolocations = PopulateLocation();
        return PartialView("_RelocateStockView");
    }

    [HttpPost]
    public ActionResult StockRelocate(RelocateStockModel model)
    {
        CommerceSuiteWMDBContext context = new CommerceSuiteWMDBContext();

        var productStockId = (from ProductStock in context.ProductStocks
                             where (ProductStock.ProductId == model.ProductId) && (ProductStock.LocationId == model.LocationFromId)
                             select ProductStock.ProductStockId).SingleOrDefault();

        var proStocksId = (from ProductStock in context.ProductStocks
                        where (ProductStock.ProductId == model.ProductId) && (ProductStock.LocationId == model.LocationToId)
                        select ProductStock.ProductStockId).SingleOrDefault();

        var productStock = _productStock.GetProductStockById(productStockId);

        var ProStock = new ProductStock();
        ProStock.ProductId = model.ProductId;
        var qty = model.Quantity;
        ProStock.LocationId = model.LocationFromId;
        ProStock.PackageId = 10000;
        ProStock.QuantityOnHand = ProStock.QuantityOnHand - qty;
        _productStock.UpdateProductStock(ProStock);
        SuccessNotification("Edited Successfully");
        return RedirectToAction("Index");
    }
}

}

コードを実行しようとすると、ビューでエラーが発生しました@Html.DropDownListFor...次のように表示されます:

オブジェクト参照がオブジェクト インスタンスに設定されていません。

どういう意味ですか?

4

2 に答える 2

3

コントローラーを表示しないので、モデルを表示しないと思います。コントローラーでこのアクション メソッドを使用してみてください。

public ActionResult Index() 
{ 
    return View(new RelocateStockModel()); 
} 

更新:このアクションメソッドが必要です:

public ActionResult StockRelocate()
{
    var model = new RelocateStockModel();
    model.products = PopulateProductId();
    model.Fromlocations = PopulateLocation();
    model.Tolocations = PopulateLocation();
    return PartialView("_RelocateStockView", model);
}
于 2012-07-29T21:12:05.883 に答える
0

何かがヌルであることを意味します。ビューのその部分にブレークポイントを置き、各オブジェクトにカーソルを合わせて、何が null かを調べます。

また、ラムダ変数を小文字で「モデル」と呼んでいるため、ラムダ オブジェクトとモデル オブジェクトのどちらを使用しているかを判断するのは困難です。

于 2012-07-29T10:05:30.653 に答える