シナリオ
上部にマスター データを含むマスター/詳細ページと、表形式のループを含む詳細データがあります。
ユーザーがボタンをクリックしたときにIDを取得したい。
問題
HttpPost
アクションが呼び出されましたが、モデルが空です。すべてのフィールドが必須というわけではありませんが、hiddenField である SaleId が必要です
私のモデルは
// Sales is Master Model
public class sales
{
[Required]
[Display(Name = "sale_id")]
public long saleID { get; set; }
[Required]
[Display(Name = "orderDate")]
public DateTime orderDate { get; set; }
[Required]
[Display(Name = "Name")]
public string Name { get; set; }
}
// This is Detail Model
public class salesDetail
{
[Required]
[Display(Name = "sale_id")]
public long saleID { get; set; }
[Required]
[Display(Name = "pkg_dur")]
public int pkgdur { get; set; }
[Required]
[Display(Name = "m_name")]
public string mName { get; set; }
[Display(Name = "price")]
public decimal price { get; set; }
}
// This is used to display data in view
public class SalesMD
{
public sales sale = new sales();
public List<salesDetail> detail = new List<salesDetail>();
}
ビューは
@model namespace.Models.SalesMD
//For Showing Master Data
@Html.HiddenFor(m => m.sale.saleID)
@Html.DisplayFor(m => m.sale.Name)
@Html.DisplayFor(m => m.sale.orderDate)
// For Showing Detail Data in table form
@foreach (var item in Model.detail)
{
@Html.DisplayFor(modelItem => item.mName)
@Html.DisplayFor(modelItem => item.pkgdur) Month(s)
@Html.DisplayFor(modelItem => item.price)
}
コントローラ
public ActionResult SalesDetail(Models.SalesMD md)
(ここで
mdは 0 と null で値を取得しています)md.sale.saleID
最後に、非表示フィールドのレンダリングされた HTML。価値がある
<input data-val="true" data-val-number="The field sale_id must be a number."
data-val-required="The sale_id field is required." id="sale_saleID"
name="sale.saleID" type="hidden" value="2">
私が使用しているとき
[HttpPost]
public ActionResult SalesDetail(long saleID)
それは例外を生成しています
パラメーター ディクショナリには、'MAK_ERP.Controllers.makAdminController' のメソッド 'System.Web.Mvc.ActionResult SalesDetail(Int64)' の null 非許容型 'System.Int64' のパラメーター 'saleID' の null エントリが含まれています。オプションのパラメーターは、参照型または null 許容型であるか、オプションのパラメーターとして宣言する必要があります。パラメータ名: パラメータ
解決
最後に、 HTML.DisplayForの代わりに HTML.HiddenForを使用して解決しました