【发布时间】: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