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 に答える