2012-01-19 63 views
0

我有一個表格中的圖像這樣:形式不是「POST'ing與FormMethod.Post屬性

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

和動作方法具有以下簽名:

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

然而,當單擊「提交」按鈕(位於表單中)時,它會涉及操作方法,但Request.HttpMethod屬性顯示「GET」,並且顯然表單數據在FormCollection對象中不可用,因爲它沒有張貼。

有什麼想法?

UPDATE:視圖的一部分:

@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: 好吧,這是愚蠢的。事實證明,該應用程序有一個由另一個開發人員編寫的自定義路由系統,該系統期望查詢字符串中的某個參數能夠被保留,而我的代碼並沒有這樣做。這導致路由系統從表單中獲取POST,無法找到合適的方法,將其轉換爲GET,然後找到我的動作方法。

我會要求這個問題被刪除。

+2

你正在使用什麼樣的提交觸發器?一個提交按鈕?發佈代碼。 –

+1

您可以發佈完整的視圖(即按鈕的位置) – Magrangs

+2

如果您從操作中刪除GET動詞,會發生什麼情況?它仍然被調用? –

回答

1

創建兩個操作方法。一個獲得和一個發佈。

[HttpPost] 
public void CreateDTActionBasedOnSelectedMetaAction(FormCollection fc) 

[HttpGet] 
public void CreateDTActionBasedOnSelectedMetaAction() 
+0

這很好,但是帖子從來沒有被擊中過,因爲在表格中沒有發佈FormMethod.Post。 –

+1

而不是使用表單集合。你可以切換到你的模型? –