2017-03-20 5 views
1

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であることがわかります。私は完全に有効なモデルを渡しているとき、それはどうですか?

+0

'@if(Model.IsBlogPostListAreaVisible)'を試しましたか? –

+0

ここでは実際の行動を見逃しています。あなたが投稿したコードはあなたの見解のためのものです。おそらく、あなたの行動はモデルをビューに正しく渡していないでしょうか? –

+0

@James Thorpe ...上記のOPの編集を参照してください – dinotom

答えて

0

のViewModel BlogPostViewModelていることを確認しますが、あなたがにリダイレクトしているアクションメソッドに移入されます。私はそれがBlogPost(BlogPostViewModel VM)であるべきだと思います。

1

あなたはBlogPostViewModelではなくBlogViewModelを返しています。 (vm.EventCommand == "viewblog")

が正しい場合

場合、RedirectToAction( "ブログ投稿"、 "ブログ"、bpvm)を返します。 にリダイレクトします。内部コードが表示されない

+0

上記のBlogPostの編集を参照してください。アクション結果 – dinotom

+0

は、@ Html.HiddenFor(m => m.BlogPost.BlogPostId)でnullエラーを引き起こす可能性があります。私はデバッグせずに他の何かを考えることができません、ごめんなさい – cranfan

関連する問題