【发布时间】:2012-08-18 04:17:03
【问题描述】:
我有一个这样的控制器:
public FooController : Controller
{
public ActionResult Index()
{
return View();
}
}
使用索引视图:
@{ Html.RenderPartial("~/Views/Bar/Add", new Models.Bar()); }
Bar 控制器是这样的:
public BarController : Controller
{
public ActionResult Add()
{
var bar = new Bar();
return View(bar);
}
[HttpPost]
public ActionResult Add(Bar bar)
{
if(ModelState.IsValid)
{
_repository.AddBar(bar);
return RedirectToAction("Index", "Foo");
}
// This will return only the partial view (No Layout, no outer view)
return View("Add", bar);
// This will not show validation errors
// return RedirectToAction("Index", "Foo");
}
}
添加视图如下所示:
@model Models.Bar
@using(Html.BeginForm("Add", "Bar", FormMethod.Post))
{
Name: @Html.TextBoxFor(x => x.Name)
<input type="submit" value="Add Bar" />
@Html.ValidationSummary()
}
我的问题是,如果我返回 View("Add", bar),我会得到部分视图,而没有其他内容(不是我想要的)。但是,如果我改为返回 RedirectToAction("Index", "Foo") 是否通过验证,我当然会丢失验证摘要的任何验证错误。
有没有办法在这样的局部视图中使用验证?
【问题讨论】:
-
为什么在返回视图中使用 [HttpGet]
-
好吧,您通常不会阅读任何内容,认为 grom get 您在这里所做的只是传递一个纯粹的操作,下一篇文章是当您从帖子中读取值时不确定是否需要 get
-
你不需要需要 Get 属性,无论如何它都是隐式的 Get 方法。这只是一种风格偏好。但是你是什么意思你没有从Get中读到任何东西?你当然知道!发布意味着您正在修改内容...不确定您要说什么...
-
它不是一个 get 方法,您所做的只是返回一个对象,该 get 通常用于从查询字符串或表单操作中读取某些内容,具体取决于您的表单操作使用 post 或 get 的方式
-
您是说如果我删除 [HttpGet] 它就不再是 GET 方法了吗?我可以向你保证,它肯定仍然是一个 GET 方法。就像我说的,这纯粹是为了消除它下面的 POST 方法的歧义。但是使用您自己的术语,您确实在阅读 something...您正在阅读从服务器发出的 HTML 怎么样?再一次,我看不到你的意思...... HttpGet 用于限制使用不同的动词调用该方法,这是我在使用后重定向模式时喜欢明确地做的事情。据我所知,这是 MVC 中非常标准的做法
标签: c# asp.net-mvc asp.net-mvc-3 partial-views