我在这样的视图中有一个表单:
@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方法。
我会要求删除此问题。
答案 0 :(得分:1)
创建两个操作方法。一个用于获取,一个用于发布。
[HttpPost]
public void CreateDTActionBasedOnSelectedMetaAction(FormCollection fc)
[HttpGet]
public void CreateDTActionBasedOnSelectedMetaAction()