Asp.net mvc MVC模型为所有属性返回0

Asp.net mvc MVC模型为所有属性返回0,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,将模型从视图传递到控制器操作时,返回的所有属性都是0。请看图片附件。 在OrderController.cs中定义的操作 [HttpPost] public ActionResult Update(Order_Detail m) { return View(); //OrderUpdateViewModel model = new OrderUpdateViewModel(); //model.hasError = true; //model.Title = m

将模型从视图传递到控制器操作时,返回的所有属性都是0。请看图片附件。

在OrderController.cs中定义的操作

[HttpPost]
public ActionResult Update(Order_Detail m)
{
    return View();
    //OrderUpdateViewModel model = new OrderUpdateViewModel();
    //model.hasError = true;
    //model.Title = m.OrderDetail.Title + " Edit Status";
}
查看文件Edit.cshtml:

@model ADO_Fan.Models.OrderDetailViewModel
@using (Html.BeginForm("Update", "Order", FormMethod.Post))
{
    <div>
    @Html.LabelFor(m => m.OrderDetail.OrderID) @Html.DisplayFor(m => m.OrderDetail.OrderID)<br />
    @Html.LabelFor(m => m.OrderDetail.Product.ProductName)  @Html.DisplayFor(m => m.OrderDetail.Product.ProductName)<br />
    @Html.LabelFor(m => m.OrderDetail.UnitPrice) @Html.DisplayFor(m => m.OrderDetail.UnitPrice)<br />
    @Html.LabelFor(m => m.OrderDetail.Quantity) @Html.TextBoxFor(m => m.OrderDetail.Quantity)<br />
    @Html.LabelFor(m => m.OrderDetail.Discount) @Html.DisplayFor(m => m.OrderDetail.Discount)<br />
    <input type="submit" value="Update" />
    </div>
}
参考类中定义的订单详细信息

namespace NorthwindDAL
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Data.Entity.Spatial;

    [Table("Order Details")]
    public partial class Order_Detail
    {
        [Key]
        [Column(Order = 0)]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int OrderID { get; set; }

        [Key]
        [Column(Order = 1)]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int ProductID { get; set; }

        [Column(TypeName = "money")]
        public decimal UnitPrice { get; set; }

        public short Quantity { get; set; }
        public float Discount { get; set; }
        public virtual Order Order { get; set; }
        public virtual Product Product { get; set; }
    }
}

如有任何建议,我们将不胜感激

您必须了解
LabelFor
DisplayFor
是否只有单向行程意味着他们只会显示数据,而不会在提交时返回数据,因此您可以
TextBoxFor
用于返回数据,也可以使用
HiddenFor

@model ADO_Fan.Models.OrderDetailViewModel
@using (Html.BeginForm("Update", "Order", FormMethod.Post))
{ 
   @Html.HiddenFor(m => m.OrderDetail.OrderID);
   @Html.HiddenFor(m => m.OrderDetail.Product.ProductName);
   @Html.HiddenFor(m => m.OrderDetail.UnitPrice);
   @Html.HiddenFor(m => m.OrderDetail.Quantity);
   @Html.HiddenFor(m => m.OrderDetail.Discount);

    <div>
    @Html.LabelFor(m => m.OrderDetail.OrderID) @Html.DisplayFor(m => m.OrderDetail.OrderID)<br />
    @Html.LabelFor(m => m.OrderDetail.Product.ProductName)  @Html.DisplayFor(m => m.OrderDetail.Product.ProductName)<br />
    @Html.LabelFor(m => m.OrderDetail.UnitPrice) @Html.DisplayFor(m => m.OrderDetail.UnitPrice)<br />
    @Html.LabelFor(m => m.OrderDetail.Quantity) @Html.TextBoxFor(m => m.OrderDetail.Quantity)<br />
    @Html.LabelFor(m => m.OrderDetail.Discount) @Html.DisplayFor(m => m.OrderDetail.Discount)<br />
    <input type="submit" value="Update" />
    </div>
}
@model ADO\u Fan.Models.OrderDetailViewModel
@使用(Html.BeginForm(“Update”、“Order”、FormMethod.Post))
{ 
@HiddenFor(m=>m.OrderDetail.OrderID);
@Html.HiddenFor(m=>m.OrderDetail.Product.ProductName);
@HiddenFor(m=>m.OrderDetail.UnitPrice);
@HiddenFor(m=>m.OrderDetail.Quantity);
@HiddenFor(m=>m.OrderDetail.Discount);
@LabelFor(m=>m.OrderDetail.OrderID)@Html.DisplayFor(m=>m.OrderDetail.OrderID)
@Html.LabelFor(m=>m.OrderDetail.Product.ProductName)@Html.DisplayFor(m=>m.OrderDetail.Product.ProductName)
@Html.LabelFor(m=>m.OrderDetail.UnitPrice)@Html.DisplayFor(m=>m.OrderDetail.UnitPrice)
@Html.LabelFor(m=>m.OrderDetail.Quantity)@Html.TextBoxFor(m=>m.OrderDetail.Quantity)
@LabelFor(m=>m.OrderDetail.Discount)@Html.DisplayFor(m=>m.OrderDetail.Discount)
}

或者您可以将
@Html.LabelFor
更改为
@Html.TextBoxFor

您必须了解
LabelFor
DisplayFor
是否只有单向行程意味着他们在提交时只显示数据而不返回数据,因此您可以
TextBoxFor
用于返回数据,也可以使用
HiddenFor

@model ADO_Fan.Models.OrderDetailViewModel
@using (Html.BeginForm("Update", "Order", FormMethod.Post))
{ 
   @Html.HiddenFor(m => m.OrderDetail.OrderID);
   @Html.HiddenFor(m => m.OrderDetail.Product.ProductName);
   @Html.HiddenFor(m => m.OrderDetail.UnitPrice);
   @Html.HiddenFor(m => m.OrderDetail.Quantity);
   @Html.HiddenFor(m => m.OrderDetail.Discount);

    <div>
    @Html.LabelFor(m => m.OrderDetail.OrderID) @Html.DisplayFor(m => m.OrderDetail.OrderID)<br />
    @Html.LabelFor(m => m.OrderDetail.Product.ProductName)  @Html.DisplayFor(m => m.OrderDetail.Product.ProductName)<br />
    @Html.LabelFor(m => m.OrderDetail.UnitPrice) @Html.DisplayFor(m => m.OrderDetail.UnitPrice)<br />
    @Html.LabelFor(m => m.OrderDetail.Quantity) @Html.TextBoxFor(m => m.OrderDetail.Quantity)<br />
    @Html.LabelFor(m => m.OrderDetail.Discount) @Html.DisplayFor(m => m.OrderDetail.Discount)<br />
    <input type="submit" value="Update" />
    </div>
}
@model ADO\u Fan.Models.OrderDetailViewModel
@使用(Html.BeginForm(“Update”、“Order”、FormMethod.Post))
{ 
@HiddenFor(m=>m.OrderDetail.OrderID);
@Html.HiddenFor(m=>m.OrderDetail.Product.ProductName);
@HiddenFor(m=>m.OrderDetail.UnitPrice);
@HiddenFor(m=>m.OrderDetail.Quantity);
@HiddenFor(m=>m.OrderDetail.Discount);
@LabelFor(m=>m.OrderDetail.OrderID)@Html.DisplayFor(m=>m.OrderDetail.OrderID)
@Html.LabelFor(m=>m.OrderDetail.Product.ProductName)@Html.DisplayFor(m=>m.OrderDetail.Product.ProductName)
@Html.LabelFor(m=>m.OrderDetail.UnitPrice)@Html.DisplayFor(m=>m.OrderDetail.UnitPrice)
@Html.LabelFor(m=>m.OrderDetail.Quantity)@Html.TextBoxFor(m=>m.OrderDetail.Quantity)
@LabelFor(m=>m.OrderDetail.Discount)@Html.DisplayFor(m=>m.OrderDetail.Discount)
}

或者,您可以将
@Html.LabelFor
更改为
@Html.TextBoxFor

,因为除了
OrderDetail.Quantity
之外,您没有为属性生成任何输入。(表单只回发成功表单控件的名称/值对,并且
DisplayFor()
不生成表单控件)。并且视图中的模型是
OrderDetailViewModel
,因此POST方法中的参数必须相同-
public ActionResult Update(OrderDetailViewModel m)
-但视图模型不应包含数据模型属性-请参阅!这两个问题您都完全正确。因为除了
OrderDetail.Quantity
之外,您没有为属性生成任何输入。(表单只回发成功表单控件的名称/值对,并且
DisplayFor()
不生成表单控件)。并且视图中的模型是
OrderDetailViewModel
,因此POST方法中的参数必须相同-
public ActionResult Update(OrderDetailViewModel m)
-但视图模型不应包含数据模型属性-请参阅!你在这两个问题上都是绝对正确的。谢谢乌斯曼!关于Html.LabelFor和Html.TextBoxFor,您是对的。正如Stephen在上面指出的,我的POST操作中的参数类型也有问题。我的第一个MVC项目。谢谢你的意见!!!若答案有帮助,你们可以接受。如果你不知道怎么查这个谢谢乌斯曼!关于Html.LabelFor和Html.TextBoxFor,您是对的。正如Stephen在上面指出的,我的POST操作中的参数类型也有问题。我的第一个MVC项目。谢谢你的意见!!!若答案有帮助,你们可以接受。如果你不知道如何检查这个