2009-03-16 10 views
2

フォーム提出とは異なるアクションであるASP.NET MVCビューで計算を行う必要があります。現在のモデルをActionLink経由で新しいコントローラアクションに渡すさまざまな方法を試しましたが、モデルは渡されていないようです。ASP.NET MVCでセカンダリアクション(フィールドの計算)を実行するにはどうすればよいですか?

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方法を試してみましたが、私は同じ問題

編集に走った:「名前あなたの送信ボタン付けし、お使いのコントローラメソッドで送信された値を検査」方法hereされるよう私が探していたもの

答えて

6

[あなたのコメントを見た。私はここでこの答えを再投稿し、問題を解決してマークすることができますのでコミュニティウィキとマークしてください.Diran]

送信ボタンに名前を付けて送信してくださいお使いのコントローラの方法:役に立つかもしれ[OK]を

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")); 
    } 

} 
+1

このようなことをしなければならないのであれば、「懸念の分離」の議論に何があったとしても、これはうっかりですか?マイクロソフト社のマーケティングレトリック!私はこれがフレームワークがそのような共通のシナリオに備えることができる最高のものであることに落ち込んでいます –

+0

あなたは明確に分かれていないと思いますか?魔法の文字列が気になる場合は、魔法の文字列の比較に頼らないように、ボタンのキャプションと値を含む静的クラスまたは外部リソースファイルを設定するのは簡単です。 –

+3

データを適切なアクションにどのように渡しますか? – rsteckly

0

アクションリンクはアクションにリンクします。それは<a href="action">action</a>タグに変換されます。それがリンクしているアクションは、今放っておいたページの状態について全く知らない。

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

+0

、へ

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

投稿。フォームのデータをオブジェクトにマッピングする方法を理解していないように思えます。 – paulwhit

+0

どのようにデータを操作していますか? – ChadT

+0

私はいくつかのサーバーベースの計算と結合して、別のフィールドセットを設定する一連のフィールドを持っています。すべてのフィールドがモデル – paulwhit

関連する問題