2

フォームの送信とは異なるアクションである、ASP.NET MVC ビューでいくつかの計算を行う必要があります。ActionLink を介して現在のモデルを新しいコントローラー アクションに渡すさまざまな方法を試しましたが、モデルが渡されないようです。

public ActionResult Calculate(MuralProject proj)
{
    ProjectFormRepository db = new ProjectFormRepository();
    List<Constant> constants = db.GetConstantsByFormType(FormTypeEnum.Murals);

    proj.Materials = new MuralMaterials();
    proj.Materials.Volunteers = this.GetVolunteerCount(constants, proj);

    this.InitializeView(); 
    return View("View", proj);
}

これを呼び出して、返されるビューに同じモデル データ (計算された変更を含む) を持たせるには、Html.ActionLink 構文が必要ですか? あるいは、これを達成する別の方法はありますか?

Ajax.ActionLink メソッドも試しましたが、同じ問題に遭遇しました

編集:「送信ボタンに名前を付けて、コントローラーメソッドで送信された値を検査する」ここに示すメソッドは、私が探していたものです。

4

2 に答える 2

6

[あなたのコメントを見ました; この回答をここに再投稿して、質問を解決済みとしてマークし、コミュニティ wiki としてマークして、担当者を取得しないようにします - ディラン]

送信ボタンに名前を付けて、送信された値をコントローラー メソッドで調べます。

<% Html.BeginForm("MyAction", "MyController", FormMethod.Post); %>
<input type="submit" name="submitButton" value="Send" />
<input type="submit" name="submitButton" value="Cancel" />
<% Html.EndForm(); %>

への投稿

public class MyController : Controller {
    public ActionResult MyAction(string submitButton) {
        switch(submitButton) {
            case "Send":
                // delegate sending to another controller action
                return(Send());
            case "Cancel":
                // call another action to perform the cancellation
                return(Cancel());
            default:
                // If they've submitted the form without a submitButton, 
                // just return the view again.
                return(View());
        }
    }

    private ActionResult Cancel() {
        // process the cancellation request here.
        return(View("Cancelled"));
    }

    private ActionResult Send() {
        // perform the actual send operation here.
        return(View("SendConfirmed"));
    }

}
于 2009-03-17T11:44:10.700 に答える
0

アクション リンクは、アクションにリンクするだけです。<a href="action">action</a>タグに変換されます。リンク先のアクションは、離れたばかりのページの状態を認識していません。

おそらくアクションに「POST」する必要がありますが、オブジェクトではなくフォームデータのみを送信します(ただし、mvc はフォームフィールドをオブジェクトに自動的にマップできます)。

于 2009-03-16T13:14:24.610 に答える