1

フォームから情報を取得してコントローラーに渡す単純な MVC アプリケーションを作成しました

意見:

@model MvcApplication1.Models.BetChargeModel


@using (Html.BeginForm())
{
<div>
    @Html.TextBoxFor(m=>m.numerators[0])   /   @Html.TextBoxFor(m=>m.denominators[0])
</div>

<div>
    @Html.TextBoxFor(m => m.numerators[1])   /   @Html.TextBoxFor(m => m.denominators[1])
</div>

<div>
    <input type="submit" value="Calculate" />
</div>
}

コントローラ:

 public ActionResult Index()
    {
        BetChargeModel model = new BetChargeModel();
        model.numerators = new List<double>();
        model.denominators = new List<double>();
        model.denominators.Add(1);
        model.denominators.Add(1);
        model.numerators.Add(0);
        model.numerators.Add(0);

        return View(model);
    }

[HttpPost]
    public ActionResult Index(BetChargeModel model)
    {
        double odds1 = model.numerators[0] / model.denominators[0];
        double odds = model.numerators[1] / model.denominators[1];

//other code
}

モデル:

 public class BetChargeModel
{
    public List<double> numerators { get; set; }

    public List<double> denominators { get; set; }

    public double result { get; set; }

}

これを実行してビューから情報をポストバックしようとすると、モデルが空に戻ってきます (null フィールドとゼロでいっぱいです)。Textbox のデータがモデルにバインドされないのはなぜですか?

(編集: モデルのプロパティと、分子、分母、および結果への参照を変更しましたが、簡潔にするためにここでは更新していません)

4

1 に答える 1

4

numerators名前に基づいてdenominators、リストをモデルのフィールドとして実装したようです。

モデルバインディングが適切に機能するには、代わりにプロパティを使用する必要があります(@Raphaelが行ったと思います)。

作業モデルは次のようになります。

public class BetChargeModel
{
    public List<double> numerators { get; set; }
    public List<double> denominators { get; set; }
}

... および命名規則に従うには、名前を および に変更numeratorsNumeratorsdenominatorsくださいDenominators

ただし、これでモデル バインディングの問題が解決しない場合は、詳しく説明してモデルの実装を投稿してください :)

- アップデート

問題がまだ解決していないというご報告がありましたので、提供されたサンプルに基づいて実装したコードを投稿します。クロス チェックを行って、マシン上ですべてが正しく表示されることを確認してください。以下に示すコードはテスト済みで、機能します。

モデル:

public class BetChargeModel
{
    public List<double> numerators { get; set; }
    public List<double> denominators { get; set; }
}

意見:

@model Project.Models.BetChargeModel

@using (Html.BeginForm())
{
<div>
    @Html.TextBoxFor(m=>m.numerators[0])   /   @Html.TextBoxFor(m=>m.denominators[0])
</div>

<div>
    @Html.TextBoxFor(m => m.numerators[1])   /   @Html.TextBoxFor(m => m.denominators[1])
</div>

<div>
    <input type="submit" value="Calculate" />
</div>
}

コントローラ:

public ActionResult Index()
{
    var model = new BetChargeModel
                    {
                        numerators = new List<double> {0, 0},
                        denominators = new List<double> {1, 1}
                    };
    return View(model);
}

[HttpPost]
public ActionResult Index(BetChargeModel model)
{
    var odds1 = model.numerators[0] / model.denominators[0];
    var odds = model.numerators[1] / model.denominators[1];
    return null;
}
于 2012-10-10T20:31:27.047 に答える