3

ドロップダウン リストが拘束力を持たないのはなぜですか? DropDownListFor Razor ヘルパー関数を使用します。

意見:

@Html.DropDownListFor(m => m.ModelObject.VatRate, Model.VatRatesList)

ビューモデル:

    public SelectList VatRatesList
    {
        get
        {
            return new SelectList(
                new Dictionary<decimal, string>
                {
                    { 0m, string.Empty },
                    { 1.2m, "20%" },
                    { 1m, "0%" }
                }, "Key", "Value",
                ModelObject.VatRate ?? 0m);
        }
    }

ありがとう。

4

2 に答える 2

3

アップデート

さらに調査したところ、これは私がバインドしようとしているモデルプロパティと関係があることがわかりました。これはnull許容の10進数です。小数に変更すると、リストから正しい値が選択されます。

ここから物事が奇妙になり始めます。辞書キーに小数点以下4桁を使用すると、null許容の小数点以下のモデルプロパティで機能します。言い換えれば、これは機能します:

 public SelectList VatRatesList
    {
        get
        {
            return new SelectList(
                new Dictionary<decimal, string>
                {
                    { 0.0000m, string.Empty },
                    { 1.2000m, "20%"},
                    { 1.0000m, "0%"}
                }, "Key", "Value");
        }
    }

理由はわかりません。おそらく、htmlヘルパーは内部でToString()を使用します。ToString()は、小数の4dp文字列表現を提供すると思います。見つけるためにMVCソースコードを調べる必要があります。

于 2012-09-08T14:25:02.913 に答える
1

その正確なコードは私にとってはうまくいきます(モデル/ビューの残りの部分を見ることができないため、問題を確認するのはかなり困難です)。これは私が使用したコードです:

コントローラ:

 public ActionResult Index()
 {
        var model = new Model();
        model.ModelObject = new ModelObject();

        model.ModelObject.VatRatesList = new SelectList(
            new Dictionary<decimal, string>
            {
                { 0m, string.Empty },
                { 1.2m, "20%" },
                { 1m, "0%" }
            }, "Key", "Value",
            model.ModelObject.VatRate ?? 0m);

        return View(model);
 }

意見:

@using (Html.BeginForm())
{
@Html.DropDownListFor(m => m.ModelObject.VatRate, Model.ModelObject.VatRatesList)
<input type="submit" value="Submit me"/>
}

コントローラーの投稿方法:

[HttpPost]
public ActionResult Index(Model model)
{
    //Breakpointing on the below line, I can see model.ModelObject.VatRate
    return RedirectToAction("Index");
}

私はこれらの2つのクラスを使用しました:

public class Model
{
    public ModelObject ModelObject { get; set; }
}

public class ModelObject
{
    public decimal? VatRate { get; set; }
    public SelectList VatRatesList { get; set; }
}
于 2012-05-25T11:11:58.847 に答える