2011-07-22 9 views
3

私は厳密に型指定されたビュー、編集、OrderModelというモデルを持っています。このビューでは、OrderTypeModelという名前のモデルを持つ強く型付けされた部分ビューを使用しています。 jqueryuiのオートコンプリートテキストボックスを含む部分ビュー、_OrderTypeAutoComplete。私はこのコードのビューをレンダリングする場合は、MVC3厳密に型指定された部分的なビューのモデルバインディング

public ActionResult Edit(){ 
    return View(); 
} 

私の編集ビューには、次のカミソリのマークアップ

<div class="editor-field"> 
    @Html.Partial("_OrderTypeAutoComplete") 
    @Html.HiddenFor(model => model.OrderTypeID) 
    @Html.ValidationMessageFor(m => m.OrderTypeID) 
</div> 

が含まれています、私はこれをレンダリングするときに私のパーシャルビューは、このかみそりマークアップ

@{ 
    Layout = null; 
} 
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script> 
@Html.AutoCompleteFor(model => model.OrderTypeID, x => x.OrderType, "Items","Orders") 

が含まれていますすべてが素晴らしいですし、私のオートコンプリートは素晴らしいです(オートコンプリートエクステンションを使用)。とにかく、初期のOrderModelで何かを初期化する必要があったので、コントローラのコードをこれに変更しました。私は、ビューをレンダリングするとき

public ActionResult Edit(){ 
    return View(OrderService.GetInitializedOrderModel()); //returns a new OrderModel 
} 

は今、私は例外を取得:辞書に渡さ モデルアイテムは、「Testing.Models.OrderModel」型であるが、この辞書は、型「テストのモデルアイテムが必要です。 Models.OrderTypeModel '

Html.Partial(「_ OrderTypeAutoComplete」)@私の見解 でこの行の

私が付属していないときレイザーエンジンが部分図の罰金のためのビューのためのOrderModelとOrderTypeModelを作成するようですOrderModelこれにより同じ結果が得られます。

public ActionResult Edit(){ 
    return View(new OrderModel()) 
} 

私はここで何が起こっているのか分かりません。私は単純に、OrderModelモデルのビューの単純なドロップダウン値を提供しようとしています。これらの値は、j​​queryポストバックを必要としないほど小さくなっています。それは私のモデルでHttp My Editアクションを取得するために初期化している値です。

ご協力いただければ幸いです。ありがとう。

+0

@ Html.Partial( "_ OrderTypeAutoComplete")は正しく動作しますか?データを渡すのではなく、部分的に実装するからです。どうやって? –

+0

それは動作しますが、私はビューをモデルに渡すことができない場合にのみ開始します。 RazorがViewとPartial Viewのモデルを作成するようです。私がビューにモデルを提供すれば、それはPartialを爆撃します。だから、もし私がポストバックして、それらがポストバック時に妥当性検査エラーであれば、それはページがリフレッシュされたときにも失敗する。 –

+0

モデルクラス(OrderModelおよびOrde​​rTypeModel)のコードを追加できますか? –

答えて

13

私が起こっている正確に何を言うことができないので、あなたのモデルクラスのクラス定義は、例から欠落している、しかし...

@Html.Partial() methodはいくつかのオーバーロードがあります。

@Html.Partial(string) 
@Html.Partial(string, Object) 
@Html.Partial(string, ViewDataDictionary) 
@Html.Partial(string, Object, ViewDataDictionary) 

最初の3つのオーバーロードは、すべて最後の1つの "エイリアス"です。

あなたが@Html.Partial(string)を呼び出すと、モデル値またはViewDataDictionaryを通過しない

は、ASP.NET MVCはちょうど 現在のビュー(すなわち this.ViewData)のためにViewDataDictionaryに渡します。

I言い換えると、コールへ:

@Html.Partial(string) 

は、本質的に相当します。

@Html.Partial(string, this.ViewData) 

...とあなたのケースでは、this.ViewDataはタイプOrderModel、ないOrderModelTypeです。

関連する問題