RedirectToActionを使用して新しいモデルを別のビューに渡しています。MVC 5ビューに移入されたモデルが渡されても、モデルはnullです
[HttpPost]
public ActionResult Index(BlogViewModel vm)
{
vm.IsValid = ModelState.IsValid;
vm.LoadDropDowns();
vm.ProcessRequest();
if (vm.IsValid)
{
// NOTE: Must clear the model state in order to bind
// the @Html helpers to the new model values
ModelState.Clear();
}
else
{
foreach (var item in vm.ValidationErrors)
{
ModelState.AddModelError(item.Key, item.Value);
}
}
if (vm.EventCommand == "viewblog")
{
//Note: this is a DIFFERENT model than the one passed into this method
var bpvm = new BlogPostViewModel
{
Blog = vm.Entity,
IsBlogPostListAreaVisible = true
};
return RedirectToAction("BlogPost", "Blogs", bpvm);
}
return View(vm);
}
コードをステップ実行すると、変数bpvmには正しいデータが完全に入力されます。はいvm.EventCommand == "viewblog"は真ですので、リダイレクトになるはずです。 HTMLで
は
@model MachineryRestorations.Services.BlogService.BlogPostViewModel
@{
ViewBag.Title = "BlogPost";
}
@using (Html.BeginForm())
{
<!-- BEGIN HIDDEN FIELDS AREA -->
@Html.HiddenFor(m => m.BlogPost.BlogPostId)
@*@Html.HiddenFor(m => m.EventArgument)*@
<!-- END HIDDEN FIELDS AREA -->
if (Model.IsBlogPostListAreaVisible)
{
<!-- code removed for brevity -->
}
}
EDIT: とコントローラ、私はModel.IsBlogPostListAreaVisible上のエラーを取得しています
public ActionResult BlogPost(BlogPostViewModel bpvm)
{
return View(bpvm);
}
を内のコード、これは事実によるものであるとのことBeginFormのブレークポイント、私はそのモデルがnullであることがわかります。私は完全に有効なモデルを渡しているとき、それはどうですか?
'@if(Model.IsBlogPostListAreaVisible)'を試しましたか? –
ここでは実際の行動を見逃しています。あなたが投稿したコードはあなたの見解のためのものです。おそらく、あなたの行動はモデルをビューに正しく渡していないでしょうか? –
@James Thorpe ...上記のOPの編集を参照してください – dinotom