即使在MVC 5视图

时间:2017-03-20 13:30:13

标签: c# asp.net-mvc-5

我正在使用RedirectToAction将新模型传递到不同的视图。

 [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 -->
    }
}

修改 和控制器中的代码

public ActionResult BlogPost(BlogPostViewModel bpvm)
{
    return View(bpvm);
}

我在Model.IsBlogPostListAreaVisible上收到错误,这是因为在BeginForm上有一个断点,我看到Model是null。当我传递一个完全有效的模型时,这是怎么回事?

2 个答案:

答案 0 :(得分:1)

您将返回BlogViewModel而不是BlogPostViewModel。如果

  

if(vm.EventCommand ==“viewblog”)

是正确的然后返回RedirectToAction(“BlogPost”,“Blogs”,bpvm);仅重定向到操作,我们没有看到内部代码

答案 1 :(得分:0)

确保在您要重定向到的操作方法中填充ViewModel BlogPostViewModel 。我认为它应该是 BlogPost(BlogPostViewModel vm)