HTTPPost上的ASP.NET MVC3部分视图

时间:2011-08-03 17:20:15

标签: asp.net asp.net-mvc-3 partial-views

我有一个视图和部分视图。视图的布局是这样的:

<html>
...
<div id="MainView">@RenderBody()</div>

<!--Partial View-->
<div id="partialView">@Html.Action("PartialViewForm", "Main")</div>
...
</html>

我的部分视图(名为_Register)是这样的:

@model PartialViewModel    
<div id="form">
@using (Html.BeginForm("PartialViewForm", "Main", FormMethod.Post))
{
    @Html.ValidationSummary(true)
    <table  >
        <tbody>
            <tr>
                <td align="left">@Html.LabelFor(model => model.Name)*</td>
                <td>@Html.EditorFor(model => model.Name)</td>
                <td align="left">@Html.ValidationMessageFor(model => model.Name, "")</td>
            </tr>            
            <tr>
                <td align="left"><input type="submit" value="Go" class="submit2"/></td>
            </tr>

        </tbody>
    </table>
}
</div>

在我的MainController中我有这样的方法:

public class MainController  : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpGet]
    public ActionResult PartialViewForm()
    {
        var partialViewModel= new PartialViewModel();   
        return PartialView("_Register", partialViewModel);
    }

    [HttpPost]
    public ActionResult PartialViewForm(PartialViewModel partialViewModel )
    {
        // if Validation is not successfull 
        return PartialView("_Register", partialViewModel);

       //  else
       ....
    }
 }

这就是我想要做的...当局部视图上的验证失败时我想回到主视图......但是在我的情况下,当验证失败时我可以看到所有我可以看到的部分视图...没有主页内容。 论坛上有帖子显示同样的行为,但我无法解决我的问题。任何人都可以告诉我如何解决它(如果你可以修改我的例子并显示它将会非常有用)

由于

1 个答案:

答案 0 :(得分:2)

我不确定我是否完全明白你想要做什么,但如果我的想法是对的,你应该只使用

[HttpPost]
public ActionResult PartialViewForm(PartialViewModel partialViewModel )
{
    // if Validation is not successfull
    model = _db.getBlah(); //get the original model for the main view
    return View("MainView", model);

   //  else
   ....
}

但是我认为你的问题可能是你真的应该在你的主视图中提交你的表单而不是你的部分 - 部分就是为你的创建/编辑视图呈现编辑器等;数据应该提交给主视图的动作,以便它可以创建/更新正确的模型。