0

我想從下拉列表傳遞一個值作爲參數的控制器方法。下面的代碼不起作用:從Html.DropDownListFor獲取值而不使用Ajax或Jquery?

@using (Html.BeginForm()) 
{ 
    <fieldset> 
     <legend>Submit</legend> 
     <div class="editor-field"> 
      @Html.DropDownListFor(m => m.ClientId, new SelectList(Model.Clients, "ClientId", "Name")) 
      @Html.ValidationMessageFor(model => model.ClientId) 
     </div> 
     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

這在簡短我控制器的方法:

[HttpPost] 
     public ActionResult SaveInvoice(string ClientId) 
     { 
//some code here 
return RedirectToAction("SaveInvoice/Complete", new { id = invoice.InvoiceId }); 
     } 

當我點擊提交表單,控制器方法不火。沒有在數據庫中創建發票,沒有重定向到「完成」。我非常喜歡這個,所以如果你有時間,請仔細解釋我需要做的事情。這個控制器啓動然後重新啓動是非常重要的。謝謝你們。

+0

如果嘗試在Fiddler打開時單擊提交,它是否會生成請求? – Amy 2013-05-06 21:24:27

回答

2

問題可能是您沒有在您的Html.BeginForm中指定正確的控制器。嘗試明確添加動作和控制器。 (我不知道你的控制器的名字,所以我發明的東西,請正確填寫值)

@using (Html.BeginForm("SaveInvoice", "yourControllerName")) 
{ 
    <fieldset> 
     <legend>Submit</legend> 
     <div class="editor-field"> 
      @Html.DropDownListFor(m => m.ClientId, new SelectList(Model.Clients, "ClientId", "Name")) 
      @Html.ValidationMessageFor(model => model.ClientId) 
     </div> 
     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

另一種可能性是,你的驗證停止從提交表單。檢查您的數據是否有效(或暫時刪除驗證程序)

1

這是假設您的所有路由設置正確。在視圖上使用無參數Html.BeginForm(),您將張貼到您加載的相同動作。我猜你SaveInvoice行動不是你加載頁面的同一行動的重載。

嘗試重載您正在使用的操作來加載HTML表單,或者使用類似Html.BeginForm("SaveInvoice", "{controller name here}")之類的操作。