0

我正在尝试修复现有应用程序中的错误,而我的 MVC ViewBag 技能有限。首先,我没有时间重构并将代码从 ViewBag 更改为 ViewModel,尽管那将是我的首选方法。

我想从 ViewBag 中的对象填充 DropDownList。代码在这里:

if(Model != null && Model.WarehouseId != null && !Model.WarehouseId.Equals(String.Empty))                
{
    @Html.DropDownListFor(m => m.WarehouseId, (IEnumerable<SelectListItem>)ViewBag.WarehouseCodes)<br /> //<---
}
else
{
    @Html.DropDownListFor(m => m.WarehouseId, (IEnumerable<SelectListItem>)ViewBag.WarehouseCodes, "")<br /> 
}

在 WarehouseID 不是 String.Empty 的情况下,我只想将该值加载到 DropDownList 中。我对这个问题的 C# 或 jQuery 答案持开放态度。

提前感谢您提供的任何帮助!

4

1 回答 1

0

而且我的 MVC ViewBag 技能有限

如果您忘记了这些技能,那对您来说会更好。开个玩笑,它们可能有助于了解在 ASP.NET MVC 应用程序中不应该做什么 :-)

反正:

if (Model != null && Model.WarehouseId != null && !Model.WarehouseId.Equals(String.Empty))                
{
    @Html.DropDownListFor(
        m => m.WarehouseId, 
        ((IEnumerable<SelectListItem>)ViewBag.WarehouseCodes).Where(x => x.Value == Model.WarehouseId.Value)
    )
    <br />
}
else
{
    @Html.DropDownListFor(
        m => m.WarehouseId, 
        (IEnumerable<SelectListItem>)ViewBag.WarehouseCodes, 
        ""
    )
    <br /> 
}

另一种方法是在您的控制器操作中处理这种情况:

public ActionResult Index()
{
    SomeModel model = ...
    IEnumerable<SelectItem> warehouseCodes = ...
    ViewBag.HasValue = false;
    if (model != null && model.WarehouseId != null && !string.IsNullOrEmpty(Model.WarehouseId.Value))
    {
        warehouseCodes = warehouseCodes.Where(x => x.Value == model.WarehouseId.Value);
        ViewBag.HasValue = true;
    }
    ViewBag.WarehouseCodes = warehouseCodes;
    return View(model);
}

在您看来,您现在可以将其替换为if

@Html.DropDownListFor(
    m => m.WarehouseId, 
    (IEnumerable<SelectListItem>)ViewBag.WarehouseCodes, 
    ViewBag.HasValue ? (string)null : ""
)
于 2012-08-16T14:49:08.687 回答