0

我似乎无法通过 ViewBag 或 ViewData 将任何数据传递给视图。它只是不断地以空值返回。

查看结果代码:

    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"
    };
}

为什么会这样?它在任何其他视图上都可以正常工作?!

4

1 回答 1

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 列表,需要使用 {} 而不是 new SelectListItem 将其拉长,以使其具有适当的功能。但这会降低可读性。所以最好的解决方案是创建一个返回 IEnumerable 的函数,然后你可以创建一个 SelectList。

关于使用 SelectList 存在一些争议,并且 DropDownList 不支持这种重载。但是 SelectList 确实实现了 IEnumerable,因此不应该支持 SelectList。

于 2012-12-09T20:01:41.463 回答