RenderAction电话是错误的操作方法
-
26-09-2019 - |
题
我在努力与renderaction,问题是,它呼吁错误的操作方法,在我的控制器。
在我的"用户"控制器也有两个操作方法称为编辑、一个用于获得一个用于员额的请求:
public virtual ActionResult Edit(int id)
{
//return a view for editing the user
}
[AcceptVerbs(HttpVerbs.Post)]
public virtual ActionResult Edit(UserViewModel model)
{
//modify the user...
}
在我看来,我叫Renderaction如下:
Html.RenderAction("Edit", "Users", new { id = 666});
现在的问题是,我希望得到的行动方法可以呈现。然而(也许是因为该模型还包含了一个财产的所谓的证件吗?), Renderaction叫我的后行动的方法代替。
有什么适当的方式做到这一点?我在使用ASP.NET 视3RC的情况下,它事项。
谢谢,
艾德里安
解决方案
子动作使用HTTP其父动作的方法
的问题是,你的视图被回发动作之后被呈现。在视图中的所有子动作渲染使用相同的HTTP方法。所以POST被复制它们。我不知道MVC3,但在MVC2没有内置的方式来解决这个问题。
所以,问题是,你希望你的Edit()
动作来呈现为一个POST视图GET。盒子外面。没有办法。
您当然可以通过提供自己的功能=类做到这一点。
其他提示
这甚至不会编制:
public virtual ActionResult Edit(UserViewModel model) {}
[AcceptVerbs(HttpVerbs.Post)]
public virtual ActionResult Edit(UserViewModel model) {}
你不能有两种方法相同的姓名和相同的参数的同一类。还有为什么你的行动 virtual
?
更新:
无法重现.这似乎并不是这样的情况:
public class UserViewModel
{
public int Id { get; set; }
}
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Edit(int id)
{
return View(new UserViewModel());
}
[HttpPost]
public ActionResult Edit(UserViewModel model)
{
return View(model);
}
}
在 Index.cshtml
呈现编辑的行动呼吁正确的编辑行动(一个与身份参数):
@{Html.RenderAction("edit", "home", new { id = "123" });}
我不是100%肯定,如果这是在MVC3可用,但在MVC2(与MvcFutures:Microsoft.Web.MVC)我会使用:
Html.RenderAction<UsersController>(c => c.Edit(666));
我知道这是非常老了,我们现在是在MVC5 - 但这仍然运行Html.RenderAction()
时表现出的行为
我解决了这个特定的情况下,是使我对我的看法模型值[HttpPost]
行动检查,如果他们是空(或其他)我叫我的return Edit()
,如果他们不是我叫AntiForgery.Validate()
到正确地验证该令牌。
不隶属于 StackOverflow