我有一个视图和部分视图。视图的布局是这样的:
<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
....
}
}
这就是我想要做的...当局部视图上的验证失败时我想回到主视图......但是在我的情况下,当验证失败时我可以看到所有我可以看到的部分视图...没有主页内容。 论坛上有帖子显示同样的行为,但我无法解决我的问题。任何人都可以告诉我如何解决它(如果你可以修改我的例子并显示它将会非常有用)
由于
答案 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
....
}
但是我认为你的问题可能是你真的应该在你的主视图中提交你的表单而不是你的部分 - 部分就是为你的创建/编辑视图呈现编辑器等;数据应该提交给主视图的动作,以便它可以创建/更新正确的模型。