【问题标题】:Post and validate only some properties of ViewModel仅发布和验证 ViewModel 的某些属性
【发布时间】:2018-08-12 02:44:13
【问题描述】:

这是我的视图模型

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 的一些属性。其他属性为空或不需要发布。

这是我的发帖方式

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

但 ModelState.IsValid 始终为 false。

如何只包含和绑定视图模型的一些属性?

【问题讨论】:

  • 视图模型不包含数据模型(尤其是在编辑时)——它们只包含视图中需要的数据模型的属性——参考What is ViewModel in MVC?
  • 为了扩展斯蒂芬的评论,一天结束,你必须将你的虚拟机映射到你的数据模型,所以你必须提供一些“默认" 您的数据模型要求的值,并在您的应用程序中说明这一点。 Hth.
  • @stephenMuecke 我读了你建议的文章。基本上我正在构建一个简单的销售订单表格。我在 ViewModel 中传递 Products 列表,我必须向用户显示。用户将从列表中选择产品,输入数量、折扣、支付金额等。其他 ViewModel 类是SaleOrderSaleOrderDetail。这些将由用户填写并回发。我想要一个捆绑包中的所有模型,我想称之为“ViewModel”。不是吗?或者您建议的一些更好的方法。
  • 但是您没有使用视图模型(尽管您将其命名为“SaleOrderViewModel”)。视图模型(编辑时)不应包含数据模型

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


【解决方案1】:

经过一番研究和尝试不同的事情。我想出了一个解决方案

[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

【讨论】:

    猜你喜欢
    • 2012-06-18
    • 2020-08-11
    • 2022-07-29
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多