表单不是使用FormMethod.Post属性进行“POST”

时间:2012-01-19 17:29:19

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

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

@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>
}

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

我会要求删除此问题。

1 个答案:

答案 0 :(得分:1)

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

[HttpPost]
public void CreateDTActionBasedOnSelectedMetaAction(FormCollection fc)

[HttpGet]
public void CreateDTActionBasedOnSelectedMetaAction()