ASP.NET MVCについて何か誤解しているのか、ASP.NET MVC Beta 3で何らかのバグを見つけたのかを調べようとしています。HTMLヘルパーを使用しているときに、PartialViewが間違ったモデルを取得する問題が発生しています。拡張機能
私のコントローラーコードは次のようになります。
public ActionResult EditGeneral(MapGeneralViewModel vm)
{
var query = MapGeneralViewModel.ToModel(vm, svcMaps);
return PartialView("General", MapGeneralViewModel.FromModel(query));
}
これが挿入である場合、プロパティvm.Idは-1として開始され、MapGeneralViewModel.ToModelの呼び出し後、データベースに永続化され、query.Idに適切な値が設定されます。
MapSettingsViewModel.FromModelを呼び出すと、新しいビューモデルが返され、正しいIdプロパティに新しく作成されたid値が含まれていることを確認しました。
ビューの関連ビットは次のようになります。
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<AdminWebRole.Models.Map.MapGeneralViewModel>" %>
<%: Model.Id %>
<%= Html.Hidden("IdTest", Model.Id) %>
<%= Html.HiddenFor(model => model.Id) %>
ビューにブレークポイントを設定すると、Model.Idが正しく設定されます。
コントローラの実際の出力(Model.Id == 70の場合)は次のようになります。
70
<input id="IdTest" name="IdTest" type="hidden" value="-1" />
<input id="Id" name="Id" type="hidden" value="-1" />
したがって、HTMLヘルパーを使用せずに出力された値は正しいですが、ヘルパーによって出力された値は、コントローラーに渡されたビューモデルを何らかの形で取得しています。
私はこれがどのように起こっているのか分かりません。私はさまざまなことを試しました:
- PartialView( )ではなくView()を使用する
- MapGeneralViewModel.FromModel()の結果をvmに割り当ててから、 vmをビューに渡します
- <%:および<%=を使用
- vmをnullに設定します(古いビューモデルはどういうわけかまだ使用されています)
- 着信IDの値を0に変更します(結果として、-1ではなく0がビューに出力されます)
- 問題は「Id」と呼ばれるプロパティに固有のものではありません。同じ結果で他のフィールドもテストしました
これがどのように機能するのか混乱していますか、それともベータバグに遭遇しましたか?違いがある場合は、Win764ビットマシンのローカルAzureランタイム内で実行されています。