【问题标题】:Form not 'POST'ing with a FormMethod.Post attribute表单不使用 FormMethod.Post 属性“发布”
【发布时间】:2012-01-20 04:49:22
【问题描述】:

我在这样的视图中有一个表单:

@using (Html.BeginForm("CreateDTActionBasedOnSelectedMetaAction", "TestCase", FormMethod.Post))

还有一个带有以下签名的动作方法:

[AcceptVerbs( new string[]{"GET","POST"})]
public void CreateDTActionBasedOnSelectedMetaAction(FormCollection fc)

但是,当点击'提交'按钮(位于表单中)时,它来到了action方法,但是Request.HttpMethod属性显示了一个“GET”,显然表单数据在那个时候是不可用的FormCollection 对象,因为它没有被发布。

有什么想法吗?

更新:视图的一部分:

    @using (Html.BeginForm("CreateDTActionBasedOnSelectedMetaAction", "TestCase",  FormMethod.Post)){
    <fieldset>
        <legend>Test Case</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
        <p>@DTContext.CurrentTestCase.Name</p>
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Criteria)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Criteria)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.DTTestCaseReqSet.DTMetaReqProcessor.DTMetaActions)
        </div>
        <div class="editor-field">
        @Html.ListBox("MyListBox", new SelectList(Model.DTTestCaseReqSet.DTMetaReqProcessor.DTMetaActions.Where(p => p.Enabled == true), "NameWithID", "NameWithID"));

        </div>


        <p>
            <input type="submit" value="Select" />
        </p>
    </fieldset>
}

更新2: 好吧,那很傻。事实证明,该应用程序具有由另一个开发人员编写的自定义路由系统,该系统期望保留查询字符串中的某个参数,而我的代码没有这样做。这导致路由系统从表单中获取 POST,无法找到合适的方法,它将其转换为 GET,然后找到了我的操作方法。

我会要求删除这个问题。

【问题讨论】:

  • 您使用的是哪种提交触发器?提交按钮?贴出代码。
  • 您能否发布完整视图(即按钮的位置)
  • 如果从操作中删除 GET 动词会发生什么?它仍然被调用吗?
  • 附注为什么你会在一个只应该处理 POST 的方法上使用 GET 动词?
  • 我试过删除所有的装饰器。它仍然命中,但我的问题是表单没有发布,即使 FormMethod.Post 已设置

标签: asp.net-mvc asp.net-mvc-3 model-view-controller


【解决方案1】:

创建两个动作方法。一种用于获取,一种用于发布。

[HttpPost]
public void CreateDTActionBasedOnSelectedMetaAction(FormCollection fc)

[HttpGet]
public void CreateDTActionBasedOnSelectedMetaAction()

【讨论】:

  • 没关系,但 Post 永远不会被击中,因为即使设置了 FormMethod.Post,表单也不会发布。
  • 而不是使用表单集合。你能把它换成你的模型吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 2014-06-17
相关资源
最近更新 更多