Mvc控制器方法中的FormsCollection - 任何其他访问方式?

时间:2011-11-10 10:56:20

标签: asp.net-mvc

我有一个表单,我想发布以确保页面在发布数据时更新(不是ajax方式)。问题是我真的只想发布记录的Id并在控制器方法中提取它。我发现表单正在发布所有内容(我可能无法解析,因为相同的表单用于更新)。但我希望能够将变量弹出到控制器方法的参数中,而不是从FormCollection中提取。我已经尝试了下面的各种参数,但都被传递为null。知道问题是什么吗?

我的控制器方法中有以下内容:

public ActionResult Delete(FormCollection collection)
{
   var idToDelete =  collection["Current.CommissionStructureId"].ToInt32();
}

// tried the following but none of them bind
public ActionResult Delete(int? Current_CommissionStructureId, int? CommissionStructureId, int? Id, int? id)
{
    // none of the above are binding (set to null)
}

2 个答案:

答案 0 :(得分:0)

您应该仅将HttpPost用于删除记录

 @using (Html.BeginForm()) {
    <input type="hidden" name="CommissionStructureId" value="@item.CommissionStructureId" />
   <p>
   <input type="submit" value="Delete" />
   </p>
   <p>
   @Html.ActionLink("Back to List", "Index")
   </p>
 }

[HttpPost]
public ActionResult Delete(int CommissionStructureId)
{            
    CommissionStructure commissionStructure = db.CommissionStructures.Find(CommissionStructureId);
    db.CommissionStructures.Remove(commissionStructure);
    db.SaveChanges();
    return RedirectToAction("Index");
}

答案 1 :(得分:0)

当您的表单值命名为Current.CommissionStructureId时,默认的模型绑定器将仅将其绑定到名为Current的类参数,并使用名为Id的属性。

所以你的选择是

  • 创建一个包含一个属性Id的小类,并将其用作参数类型

  • 编写自定义模型绑定器