1

かみそりエンジンを使用してMVC4プロジェクトを構築していますが、それが私の問題に関連しているかどうかはわかりません。Submit(String poId)ActionResultを持つVendorBillControllerがあります。私のリンクは次のようになります:example.com/VendorBill/Submit?poId=790a2e76-5186-42c1-8087-c13b18d22023

ただし、このページに移動しようとすると、次のエラーが発生します。

ビュー「722884」またはそのマスターが見つからなかったか、検索された場所をサポートするビューエンジンがありません。

ビュー722884を探しているのはなぜですか?数字、文字、ダッシュはhtmlリンクで問題ないと確信していましたが、リンクをhtmlエンコードしてみましたが、何も変わりません。

入れたら

example.com/VendorBill/Submit?poId=asdf

関数に到達しますが、poIdが新しいGuid()に渡され、asdfがguidではないため、失敗します。

URLのGUIDが失敗するのはなぜですか?GUIDが渡される必要のあるIDである場合、これに対する「通常の」回避策はありますか?

編集:

これが私のコントローラー全体のコードです:

これはGUIDでも機能しません。これが私のコントローラー全体ですが、そこに到達しているとは思わないので、問題があるかどうかはわかりません。

    public class VendorBillsController : Controller
    {
        public ActionResult Submit(Guid poId)
        {

            var purchaseOrderId = new Models.Entities().TempLinks.AsQueryable().Single(x => x.Guid == poId).PurchaseOrderId;


            return View(purchaseOrderId.ToString());
        }
    }
}
4

2 に答える 2

3

の署名をSubmitに変更すると機能しSubmit(Guid poId)ますか?

MVCでGUIDをネイティブに使用しても問題はなく、GUIDが変換されます。

上記がうまくいかない場合は、コントローラーメソッドのコードを含めて確認してください。

更新:いいえ、あなたの問題はこれです:

return View(purchaseOrderId.ToString());

文字列をViewに渡す場合、渡すのはビューの名前であると想定されます(MSDNでこれを参照)。ビューモデルをタイプstringにする場合は、ビューを渡す必要があります。最初のパラメーターとして名前を付け、次にマスタービュー名、次に文字列値(このオーバーロード)。単一のプロパティを持つ明示的なビューモデルを宣言し、PurchaseOrderIdそれをviewメソッドに渡す方がはるかに簡単です。メソッドのオーバーロードを設定する方法では、文字列以外Viewの任意のビューモデルタイプを使用できます。

GUIDの場合は渡すことができますが、GUIDとして渡す必要があります。呼び出さないでください。ToString()

于 2012-11-20T00:24:29.680 に答える
1

強く型付けされたビューに文字列のみを渡したい場合に問題が発生します。文字列を渡すときにMVCが期待しているのは、ロードするビューの名前です。これが、渡したGuid文字列に基づいてビューを探していて見つけることができなかった理由です。

MSDN:Controller.View(string viewName)

Gleen Slavenは、タイプを文字列からGuidに変更しても、この問題は発生しないというのは正しいことです。

于 2012-11-20T00:44:17.323 に答える