0

私には2つの方法があります:加算と減算。[追加]ボタンをクリックすると、3番目のテキストボックスにA+Bの結果が表示されるようにします。[減算]ボタンをクリックすると、3番目のテキストボックスにA-Bの結果が表示されます。

簡単なことだと思いました(ASP.NET WebFormアプリケーションの数行のコードで実行できるため)。しかし、何度も試して数人の友人に尋ねた後、私はまだ解決策を見つけることができません...

@using (Html.BeginForm("Add", "MyMVC"))
{
    <ol>
        <li>
            @Html.TextAreaFor(m => m.A)
        </li>
        <li><span>+ </span></li>
        <li>
            @Html.TextAreaFor(m => m.B)
        </li>
        <li><span>= </span></li>
        <li>
            @Html.TextAreaFor(m => m.C)
        </li>
    </ol>
    @{
    Html.RenderAction("Calculate", "MyMVC");
    }
    @{
    Html.RenderAction("Subtract", "MyMVC");
    }
}
4

2 に答える 2

1

RenderAction タグは必要ありません。BeginForm 拡張機能は、それ自体にポストするフォーム要素もレンダリングする必要があります。

ビューを次のように変更します

@model SampleMvc.Models.SumModel

@using (Html.BeginForm())
{
    <ol>
        <li>
            @Html.TextAreaFor(m => m.A)
        </li>
        <li><span>+ </span></li>
        <li>
            @Html.TextAreaFor(m => m.B)
        </li>
        <li><span>= </span></li>
        <li>
            @Html.TextAreaFor(m => m.C)
        </li>
    </ol>
    <input type="submit" id="add" name="Calculate" value="Add" />
    <input type="submit" id="subtract" name="Calculate" value="Subtract" />
}

submit 入力の name 属性に注目してください。これにより、デフォルトのモデル バインダーが Calculate というプロパティにバインドできるようになります。

あなたのためにViewモデルは次のようなものを使用します

public class SumModel {
        public int A { get; set; } 
        public int B { get; set; } 
        public int C { get; private set; }
        public string Calculate { get; set; }

        public void RunCalculation() {
            if (Calculate.Equals("add",StringComparison.InvariantCultureIgnoreCase)) {
                C = A + B;
            } else {
                C = A - B;
            }
        }
    }

次に、コントローラーで次のようなアクションを実行します。

public ActionResult Calculate() {
        return View();
    }

[HttpPost]
public ActionResult Calculate(SumModel sumModel) {
    sumModel.RunCalculation();

    return View(sumModel);
}

送信入力のクリック イベントを介してフォームが送信されると、ボタンの値が SumModel の Calculate プロパティに自動的にバインドされます。

次に、メソッド RunCalculation が呼び出されると、プロパティを使用して、値 A および B に対して実行する操作を決定します。

于 2013-01-24T04:00:04.817 に答える
0

他の簡単な方法は、ボタンに同じ名前を付けることができます。次に、コントローラーで読み取ります。

<input type="submit" id="add" name="buttonclicked" value="Add" />
<input type="submit" id="subtract" name="buttonclicked" value="Subtract" />


[HttpPost]
public ActionResult Index(string buttonclicked, SumModel sumModel) {
if(buttonclicked=="add"){

}
else{

}
}
于 2013-01-28T22:09:42.817 に答える