2017-06-24 8 views
0

私は入力が少ない形式、nameemailmessageおよびいくつかはcheckboxesです。これらの入力用のモデルを作成し、必要なすべての検証を設定しました。ビューから次のコントローラにモデルを渡す

しかし、今では私のモデル(つまり@model MyModel)、または私のモデルのオブジェクトプロパティをそれらの入力とともに渡したいと思っています。

私のモデルにVewBag/viewDataを移植する方法はありますか?

@{ 
     ViewBag.MyModel = Model; 
     // or ViewBag.ThatProperty = Model.ThatProperty 
} 

また、私の袖の上にはまだ良い方法がありますか?

答えて

1

ViewBagViewDataをは1人のサーバーからクライアントへの旅行、そして周りにいない他の方法に固執します。

オブジェクトをビューからコントローラに渡す方法はありません。それがデータベースオブジェクトの場合は、以下で説明する2つの方法のいずれかを使用してオブジェクトIDを渡し、ポストにDBを照会します。

他の方法がない場合は、オブジェクトをJSON文字列として(たとえばNewtonsoftパッケージを使用して)エンコードし、以下で説明する2つの方法のいずれかを使用して渡すこともできますが、これは最適なオプションではありません。

  • URLパラメータ
  • 隠しフィールド

URLパラメータ

<form ... asp-route-ThatProperty="@Model.ThatProperty"> 
... 
</form> 

がコントローラへのビューからプロパティを渡すには、次の2つのオプションがあります フォームフィールド

<form> 
<input type="hidden" name="ThatProperty" value="@Model.ThatProperty" /> 
</form> 

コントローラーアクション

'ThatProperty' は、あなたのモデルに存在しない場合は、追加のパラメータとして、それを受け取ります。

public IActionResult MyAction (MyModel model, string ThatProperty) 
{ 
    ... 
} 
+0

問題はThatProperty'がオブジェクトではない 'int'や' STRING' –

+0

のような単純な財産であるコントローラにビューからオブジェクトを渡す方法はありません 'です。それがデータベースオブジェクトの場合は、オブジェクトのIDを渡して、フォーム投稿時にデータベースに問い合わせることができます。 –

+0

私は参照してください。ありがとうございました。関連するプロパティを抽出するだけです。 –

関連する問題