2014-12-05 127 views
0

我正在做一個小的形式,允許用戶確認他reallly要刪除的項目,但我不能讓控制器上的ID ...簡單的模型數據的HTML表單綁定

@using (Html.BeginForm("Delete", "Home", FormMethod.Post)) 
     { 
      @Resources.Audit.Delete_Ask_Confirmation_Text 
      @Html.HiddenFor(model => model.audit.id) 
      <button type="submit" class="btn btn-warning"> 
       <i class="glyphicon glyphicon-trash spaceAfterIcon"></i> @Resources.Audit.Delete_Ask_Confirmation_Button 
      </button> 
     } 

=>在審計:

public int Id { get; set; } 

的Html

<div> 
    <form action="/Audit/Home/Delete" method="post" novalidate="novalidate">Lore Ipsum 
     <input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="audit_Id" name="audit.Id" type="hidden" value="2"> 
     <button type="submit" class="btn btn-warning"> 
      <i class="glyphicon glyphicon-trash spaceAfterIcon"></i> Please confirm the delete 
     </button> 
    </form> 
</div> 

控制器:

[HttpPost] 
     public ActionResult Delete(int id) 
     {// always null} 

id參數始終爲空。

我試着改變方法簽名:

Delete(int audit_Id), 
Delete(int id), 
Delet(string id), 
Delete(string audit_id), 
... 

感謝您的幫助!

+0

是什麼問題? – 2014-12-05 14:05:18

+0

@Ahmedilyas:我不能'在控制器上獲得id,r總是爲null或異常 – clement 2014-12-05 14:05:51

+0

這是因爲您有一個模型和一個內部具有該ID的對象。命名/ POST參數名稱不正確,因此模型聯編程序無法將POST的屬性綁定到action方法中的參數。我會打開小提琴手,看看這個參數是作爲什麼發佈的。甚至打開開發人員工具欄,找到該屬性的DOM名稱,然後在操作方法中使用它。 – 2014-12-05 14:06:30

回答

2

如果您嘗試使用表單域和Html幫助器函數,您需要將模型作爲Delete控制器方法的參數。剛剛ID是比較正確的,你可以確保它是通過改變你的形式聲明,並添加對象表示附加路由值傳遞:

@using (Html.BeginForm("Delete", "Home", new { id = Model.audit.id }, FormMethod.Post))} 

您也可以刪除隱藏的輸入類型。

+0

沒關係,但爲什麼比放隱藏的魔法更正確? – clement 2014-12-05 14:20:15

+0

當你只需要id時,我的正確性評論更多的是將整個模型用作控制器中的參數,但只傳遞id更爲正確。無論如何,我不是一個隱藏領域的愛好者,它更有意義(在我的腦海中)以更安寧的方式傳遞URL中的id。 – DoctorMick 2014-12-05 14:23:33

+0

我同意@DoctorMick,但當您使用防僞標記時,表單可能會變得方便。 – Marthijn 2014-12-05 14:51:06

0

MVC模型綁定通過名稱對話處理參數。您隱藏的輸入名稱是

name="audit.Id" 

所以你動作要

public ActionResult Delete(audit model){ 
    var id = model.id; 
} 

OR

@ DoctorMick的答案。