RedirectToAction()vs。View()および三元演算子?
-
26-10-2019 - |
質問
どのActionがコントローラーアクションから戻ることを決定するとき、私は長いIF-ELSEとは対照的に、三元演算子を使用することにしました。これが私の問題です...
このコードは機能します
return
ModelState.IsValid ?
(ActionResult) RedirectToAction("Edit", new { id = id }) :
View(new EditViewModel(updatedCategory));
しかし、これはそうではありません
return
ModelState.IsValid ?
RedirectToAction("Edit", new { id = id }) :
View(new EditViewModel(updatedCategory));
if-elseを使用している場合、明示的なキャストを行う必要はありません。さらに、RedirectToAction()とView()の両方がActionResult Derivativeを返します。
私はこのコードの告知が好きですが、そのキャスティングは正しくないようです。誰かが私を啓発できますか?
これは明らかだと確信していますが、EditViewModelは編集アクションのビューモデルであり、UpdatedCategoryはEF4オブジェクトです。しかし、これが問題に関連しているとは思わない。
わかりました...私は自分がやっていることは不要であることに気付きました。なぜなら、更新されたCategoryを使用して編集アクションに戻っているので、モデルが有効であることを確認する必要はありません。誰かが助けることができるかどうか、質問に対する答えを知りたいと思っています。
解決
それは、?:オペレーターを使用するときの議論が、たとえば条件で、自分の間で変換できる必要があるためだと思います。 X:Y xをyまたはyに変換できる必要があります。次に、結果のタイプは2つの中で最も特異的ではありません。したがって、xがオブジェクトとYA文字列である場合、オブジェクトに文字列をキャストできれば、結果はオブジェクトのタイプになります。
例では、xはredirecttorouteresultであり、yはviewresultです。 RedirectTorouteresultを視聴に変換することも、その逆も同様です。君は できる ただし、両方をアクションに変換します。そのため、アクションが実行されると機能すると、Xのタイプはアクションが実行され、Yはアクションに変換でき、全体的な結果は操作の型に変換できます。
私がそこに正しく説明したことを願っています...私は自分でそれを使用することはめったにないので、私は?
他のヒント
データ型は、割り当て変数でまったく同じでなければならず、ここでの両方のリターンタイプは、私が考えることができる最も単純な例です。
int originalValue = 10;
int? value = (originalValue != 10) ? null : originalValue;
//Which is very easily fixed with type casting as you have done
int? value = (originalValue != 10) ? null : (int?)originalValue;