一个视图中的MVC3多个部分视图

时间:2012-03-13 03:00:46

标签: asp.net-mvc-3 c#-4.0 razor partial-views

提供的答案here正是我所做的。但是当我在partialview中点击提交时,输出只是PartialView的html!我是MVC3的新手,所以我确信我只是错过了我应该学到的东西。

 public ActionResult CreateV2Worksheet()
    {
        return PartialView("_NewV2WorksheetInput", new NewV2WorksheetInputModel());
    }

    [HttpPost]
    public ActionResult CreateV2Worksheet(NewV2WorksheetInputModel pNewV2Input)
    {
        if (ModelState.IsValid)
        {
            ModelState.AddModelError("ScreeningNumber", "random server err");
            return PartialView("_NewV2WorksheetInput", pNewV2Input);    
        }

        return PartialView("_NewV2WorksheetInput", pNewV2Input);
    }

2 个答案:

答案 0 :(得分:1)

我假设您没有通过AJAX提交,因此您正在进行完整的回发。在这种情况下,你的输出是有意义的:你发布到局部视图,然后你回来的是部分视图的html,因为一旦发布帖子,你的html状态就消失了。部分只是部分...你不能发布到部分并期望得到返回的完整输出。

我建议发布到呈现整个页面的Action,或者让部分呈现完整页面视图(return FullPageView( someData );),或者重定向到整页视图({{1} })。

或者,您可以通过ajax发布并返回return Redirect( "FullPageview" );然后处理客户端上的任何UI更改(jquery等)。你应该可以使用Ajax.BeginForm()来做到这一点..但这不是我个人使用的东西所以无法帮助那里。有一篇帖子here显示了如何获取原始部分输出并更新UI。另一种方法是返回一个带有JsonResult的对象,并进行错误处理等,并解析它。即。

JsonResult

答案 1 :(得分:0)

使用return View("_NewV2WorksheetInput", pNewV2Input);

而不是return PartialView("_NewV2WorksheetInput", pNewV2Input);

然后,部分视图将呈现到您当前页面使用的布局中。如果要将局部视图渲染到另一个布局中,请将其放在PartialView上。

@{
      Layout="~/Views/Shared/<Layout Name>.cshtml"
}