我在努力与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()到正确地验证该令牌。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top