仅发布和验证ViewModel的某些属性

时间:2018-08-12 02:44:14

标签: asp.net-mvc entity-framework post model-view-controller viewmodel

这是我的ViewModel

public class SaleOrderViewModel
{
    public SO SaleOrder { get; set; }
    public List<SOD> SaleOrderDetail { get; set; }
    public IQueryable<Product> Products { get; set; }
    public Product Product { get; set; }

}

我只想发布和验证SaleOrder和SaleOrderDetail的某些属性。其他属性为null或不需要发布。

这是我的帖子方法

[HttpPost]
[ValidateAntiForgeryToken]    
public ActionResult Create([SaleOrderViewModel saleOrderViewModel)
    {
        if (ModelState.IsValid)
        {
           //more code
        }
    }  

但是ModelState.IsValid始终为假。

我如何仅包含和绑定视图模型的某些属性?

1 个答案:

答案 0 :(得分:0)

经过一些研究并尝试了不同的方法。我想出了一个解决方案

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Prefix = "SaleOrder", Include = "BillAmount,Balance")] SO sO, [Bind(Prefix = "SaleOrderDetail", Include = "ProductId,Quantity")] List<SOD> sOD)
    {
        if (ModelState.IsValid)
        {
            sO.CustomerId = 10;
            sO.Date = DateTime.Now;
            sO.SaleReturn = false;
            db.SOes.Add(sO);
            db.SaveChanges();
            foreach (SOD sod in sOD)
            {
                sod.SOId = sO.Id;
            }

            db.SODs.AddRange(sOD);

            db.SaveChanges();
            return RedirectToAction("Index");
        }

我很高兴,但我不明白post方法如何自动接受两个参数?

在视图中,我已经像这样绑定了我的ViewModel。

@model MYBUSINESS.Models.SaleOrderViewModel