我似乎无法通过ViewBag或ViewData将任何数据传递给View。它只是一直无效。
ViewResult代码:
public ViewResult EditProduct(Guid id)
{
var product = _repository.Products.FirstOrDefault(x => x.ID == id);
ViewData["Categories"] = _repository.Categories;
ViewData["CategoryList"] = _repository.Categories.Select(x => new SelectListItem { Text = x.Name, Value = x.ID.ToString(), Selected = product.ID == x.ID });
ViewBag.Test = "Hello";
return View(product);
}
这是剃刀代码:
@model NightingalecrossMVC.Domain.Entities.Product
@{
var test = ViewData.Eval("CategoryList");
var test2 = ViewBag.Test;
ViewBag.Title = "Edit Treatment";
AjaxOptions ajaxOpts = new AjaxOptions
{
UpdateTargetId = "saveData",
HttpMethod = "Post",
LoadingElementId = "loader"
};
}
为什么会这样?它适用于任何其他视图?!
答案 0 :(得分:0)
获取空值的原因是因为我有这个:
public ViewResult CreateProduct()
{
return View("EditProduct", new Product());
}
需要这样:
public ViewResult CreateProduct()
{
ViewBag.CategoryList = _repository.Categories.Select(x => new SelectListItem { Text = x.Name, Value = x.ID.ToString() });
return View("EditProduct", new Product());
}
修改
实际上,由于LINQ中的ToString()方法,你不能创建像这样的selectlistitem列表,它需要用{}而不是新的SelectListItem来拉长,以便从中创建一个正确的函数。但这会降低可读性。所以最好的解决方案是创建一个返回IEnumerable的函数,然后你可以创建一个SelectList。
关于使用SelectList存在一些争议,DropDownList不支持该重载。但是,SelectList确实实现了IEnumerable,因此不应该支持SelectList。