2016-09-06 10 views
0

この参照空白+パラメータを対象とすることが可能である:MVCはそれが

:ここに私の関数のヘッダであるので、それはそれが行うことにsuposedされているものんが、私は私のモデルを必要とするものならば

@Html.ActionLink("link", "Func", new { controller = "MyControl" }, new { target = "_blank" }) 

public ActionResult Func(model_1 m) 
{ } 

私がやっていることは、新しいタブを開き、この新しいタブにモデルを運ぶことです...どうすればいいですか?

+1

クエリ文字列には制限があります。あなたのモデルが巨大ならどうでしょうか!必要に応じて、2番目のアクションメソッドがモデルを再構築できるユニークなID/IDを渡す必要があります。 – Shyju

答えて

0

ルート値を渡すことができるHtml.ActionLinkヘルパーメソッドのオーバーロードがあります。

@Html.ActionLink("link", "Func", "MyControl" ,new { EmpId=1, EmpCode="E23" ,Age =23}, 
                    new { target = "_blank" }) 

これは基本的に、提供したルート値からクエリ文字列が形成されたhref値のアンカータグを生成します。

<a href="/Mycontrol/Func?EmpId=23&EmpCode=E23&Age=23">link</a> 

あなたはこれらの2つのプロパティを持つクラスは、アクションメソッド

public class EmployeeVm 
{ 
    public int EmpId { set;get;} 
    public string EmpCode { set;get;} 
    public int Age{ set;get;} 
} 

のパラメータとして使用されていることが前提とこれはあなたのアクションメソッドの引数の型として使用されている

public ActoinResult Func(EmployeeVm model) 
{ 
    // To do : Return something 
} 

モデルバインダーは、クエリーストリング値をパラメーターオブジェクトのプロパティーにマップできます。

しかし、クエリ文字列には、データの量に制限があります。 上記のアプローチは、リーン・フラット・ビュー・モデル・クラスに対して機能します。プロパティが他のクラス/他のタイプのコレクションである複雑なviewmodelクラスでは機能しません。

この場合、最良の解決策は、一意のID/IDの組み合わせを渡して、それを使用して、2番目のアクションメソッドでモデル/ビューモデルを再構築することです。

@Html.ActionLink("link", "Func", "MyControl" ,new { EmpId=1}, new { target = "_blank" }) 

とあなたのアクションメソッドで

public ActionResult Func(int empId) 
{ 
    // to do : Using empIdvalue, Get the View model /Model data 
    // Ex : EmployeeVm emp = SomeService.GetEmployeeFromId(empId) 

} 

SomeService.GetEmployeeFromIdが社員を受け入れ、EmployeeVmのオブジェクトを返すと仮定。このメソッドは、渡されたIDの対応する従業員レコードを取得し、そのデータからEmployeeVmオブジェクトを構築するためにdbテーブルを照会できます。