【问题标题】:Html.Action - Get versus PostHtml.Action - 获取与发布
【发布时间】:2011-07-02 03:38:31
【问题描述】:

我经常这样做:

<div id='Product'>
@Html.Action("Create", "Product")
</div>

这很方便,因为我可以将产品创建表单的绘制委托给另一个控制器操作以嵌入到位置。但是,我遇到的问题是该方法有时(我还没有弄清楚在什么条件下)调用我的控制器操作的 [HttpPost],这当然会失败。

有没有办法强制@Html.Action() 调用GET 版本?

【问题讨论】:

    标签: asp.net-mvc-3 razor controller-action


    【解决方案1】:

    Html.Action 的工作方式是,如果当前对页面的请求是一个 post 方法,那么它将搜索名称为 HttpPost 的方法。

    所以发生的事情是您正在发布当前页面,并且该操作同样假定所有应该执行的操作也必须是 POST。

    据我所知,没有办法强制它切换到这样的不同方法。

    【讨论】:

    • 是的,我确实想通了。这对他们来说是一个可怕的假设。我最终做的是重命名动作,以免有歧义
    • 这可能是最好的解决方案。很高兴能帮上忙。
    【解决方案2】:

    尝试将AcceptVerbs 属性添加到您的操作中:

    [AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
    public ActionResult Create()
    {
        //Your code
    }
    

    这适用于 GET 和 POST 请求。

    【讨论】:

    • hmm...是的,但这会迫使我将两种行为编码到同一个方法中...这意味着我需要一种方法来判断方法中是否执行了 Post 或 Get .. . 怎么做?
    【解决方案3】:

    我也遇到了类似的问题,确实有解决方案。 只需使用 IsPost 属性和 VOILA 来检查请求是在视图中获取还是 POST....

    @if(!IsPost)    
    {    
        HTML.Action("ActionName")    
    }
    

    关于遇到类似问题的人......

    【讨论】:

      【解决方案4】:

      我刚遇到这个问题,很难识别。我最终改用 Html.RenderPartial,如下所示:

      <div id='Product'>
      @{Html.RenderPartial("_CreatePartial", new Product());}
      </div>
      

      【讨论】:

        猜你喜欢
        • 2011-05-05
        • 2013-10-25
        • 1970-01-01
        • 1970-01-01
        • 2020-04-26
        • 2019-02-11
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        相关资源
        最近更新 更多