设想
我有一个主/明细页面,主数据位于顶部,明细数据以表格格式循环。
我想在用户单击按钮时获取 Id。
问题
HttpPost
已调用但模型为空的操作。我想要的是隐藏字段的 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 的值)
请记住:我只想要隐藏字段的 SaleId 我正在尝试像那样获取 saleIdmd.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)”的不可空类型“System.Int64”的参数“saleID”的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。参数名称:参数
解决方案
最后我通过使用HTML.HiddenFor而不是 HTML.DisplayFor解决了这个问题