这是我关于 AddNewProductViewModel 的代码。
这是我的控制器中创建(Create)方法的代码:
现在我在这一行代码上遇到了NullReferenceException异常。
using AccessorizeForLess.Data;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web;
namespace AccessorizeForLess.ViewModels
{
public class AddNewProductViewModel
{
public string Name { get; set; }
[DataType(DataType.MultilineText)]
public string Description { get; set; }
public decimal Price { get; set; }
public string AltText { get; set; }
public int Quantity { get; set; }
public string ImagePath { get; set; }
public HttpPostedFileBase Image { get; set; }
public List<ProductCategory> Category { get; set; }
}
}
这是我的控制器中创建(Create)方法的代码:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(AddNewProductViewModel model)
{
ProductImageViewModel image = new ProductImageViewModel() { ImagePath = "/Content/ProductImages/" + model.Image.FileName, AltText = model.AltText };
ProductImage newImage = new ProductImage() { ImagePath = image.ImagePath, AltText = image.AltText };
entities.ProductImages.Add(newImage);
await entities.SaveChangesAsync();
int ImageId = newImage.ProductImageId;
Product product = new Product()
{
ProductImageId = ImageId,
ProductName = model.Name,
ProductDescription = model.Description,
ProductPrice = model.Price,
Quantity = model.Quantity
CategoryID = model.
};
string file = model.Image.FileName;
string path = Server.MapPath(@"~/Content/ProductImages");
string fullPath = path + @"\" + file;
try
{
model.Image.SaveAs(path + @"\" + file);
if (ModelState.IsValid)
{
entities.Products.Add(product);
await entities.SaveChangesAsync();
return RedirectToAction("Create");
}
}
catch (Exception ex)
{
ViewBag.Message = ex.ToString();
}
//ViewBag.ProductImageId = new SelectList(entities.ProductImages, "ProductImageId", "ImagePath", product.ProductImageId);
return View("Create");
}
现在我正在尝试在视图中填充下拉列表:
<div class="form-group">
@Html.LabelFor(model => model.Category, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.Category.Id, new SelectList(Model.Category,"Value","Text"), "- Please Select -")
@Html.ValidationMessageFor(model => model.Category)
</div>
</div>
以下是我收到的错误信息:
CS0411: 方法'System.Web.Mvc.Html.SelectExtensions.DropDownListFor(System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression<, System.Collections.Generic.IEnumerable<SelectListItem>>, object)'的类型参数无法从使用中推断。请尝试明确指定类型参数。
编辑
这是新的AddNewProductViewModel:
using AccessorizeForLess.Data;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web;
namespace AccessorizeForLess.ViewModels
{
public class AddNewProductViewModel
{
public string Name { get; set; }
[DataType(DataType.MultilineText)]
public string Description { get; set; }
public decimal Price { get; set; }
public string AltText { get; set; }
public int Quantity { get; set; }
public string ImagePath { get; set; }
public HttpPostedFileBase Image { get; set; }
public ProductCategory Category { get; set; }
public int SelectedCategoryId { get; set; }
public List<ProductCategory> Categories { get; set; }
}
}
这是我的更新版本下拉列表
<div class="form-group">
@Html.LabelFor(model => model.Category, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.SelectedCategoryId,
new SelectList(Model.Categories, "CategoryId", "CategoryName"), "- Please Select -")
@Html.ValidationMessageFor(model => model.Category)
</div>
</div>
现在我在这一行代码上遇到了NullReferenceException异常。
@Html.DropDownListFor(model => model.SelectedCategoryId,
鉴于我的代码,有人能否请指出我在这里做错了什么,我从昨晚开始就一直在苦苦挣扎。
Category
的属性,该属性是一个复杂对象,其中包含属性ID
(属性Category
是一个List<ProductCategory>
)。 - user3559349int CategoryID
来绑定下拉列表,并建议你将集合命名为(比如)CategoryList
,以便清楚地了解你的属性。 - user3559349return View(“Create”);
不会返回模型,因此new SelectList(Model.Categories ...
会抛出异常,因为Model.Categories
为空。您需要重新填充集合并使用return View(model);
。 - user3559349