【问题标题】:Html.RenderAction uses Post instead of GetHtml.RenderAction 使用 Post 而不是 Get
【发布时间】:2014-02-28 14:06:10
【问题描述】:

我的页面上有一个简单的表单。提交时,它会检查是否ModelState.IsValid,如果无效则返回具有相同模型的视图。

在同一页面上,我正在呈现一个包含另一个表单的操作,如下所示:

Html.RenderAction("AccountNote", new { id = Model.ID });

在我在页面上提交表单并且验证失败之前,一切正常。当它再次显示页面时,AccountNote 操作的 Post 事件会在我期望 Get 事件触发时触发。我想这是有道理的,因为它是渲染视图的操作的帖子,但我希望触发 Get 事件。

public ActionResult AccountNote(int id)
{
    //code goes here...

     return PartialView(model);
}

[HttpPost]
public ActionResult AccountNote(AccountNoteViewModel model)
{
    //code goes here...

    return PartialView(model);
}

我做错了吗?还是我必须做一些诡计才能完成这项工作?我希望 Html.RenderAction 始终假定 GET 而不是 POST。

【问题讨论】:

标签: asp.net-mvc-4 razor


【解决方案1】:

一种解决方案是只有一个AccountNote() 操作方法。然后无论 GET 还是 POST 都会调用它。如果您使用的是AccountNote() 的 POST 版本,您可能需要稍微修改您的逻辑。

你可以用[ChildActionOnly]属性来装饰它。

【讨论】:

    【解决方案2】:

    据我所知,对于这个问题没有任何开箱即用的解决方案。 RenderAction 和 Action 方法,考虑当前请求来决定使用哪个动词。 但是您可以重命名它们。例如,将限制为 HttpPost 的一个重命名为 AddAccountNote,而另一个保留当前名称且不指定其动词。

    【讨论】:

      【解决方案3】:

      RenderPartial 是否适合您?

      更多关于这个话题的讨论可以在这里找到:RenderAction calls wrong action method

      【讨论】:

        猜你喜欢
        • 2011-08-04
        • 2010-09-07
        • 1970-01-01
        • 2016-12-25
        • 1970-01-01
        • 1970-01-01
        • 2016-03-12
        • 1970-01-01
        相关资源
        最近更新 更多