2017-03-15 19 views
1

當傳遞的模型從視圖到控制器的動作,返回的所有屬性都爲0。請參閱附圖。在OrderController.csMVC模式返回0對所有屬性

[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定義 Returned model

操作:

@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> 
} 

視圖模型在OrderDetailViewModel.cs參考類中定義

using NorthwindDAL; 
namespace ADO_Fan.Models 
{ 
    public class OrderDetailViewModel 
    { 
     public Order_Detail OrderDetail { get; set; } 
    } 
} 

Order_Detail

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; } 
    } 
} 

任何意見/建議表示讚賞!

+1

因爲你不生成比'OrderDetail.Quantity'其它性質的任何輸入。 (表單只回傳成功表單控件的名稱/值對,而'DisplayFor()'不生成表單控件)。 –

+1

而在你視圖的模型是'OrderDetailViewModel'所以在POST方法的參數必須是相同的 - '公衆的ActionResult更新(OrderDetailViewModel米)' - 但視圖模型不應該包含一個屬性,它是一個數據模型 - 指[什麼是MVC中的ViewModel?](http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc) –

+0

謝謝Stephen!你對這兩個問題都是絕對正確的。 –

回答

0

你要明白LabelForDisplayFor只做單程意味着他們將只顯示數據,並不會返回數據返回的數據進行提交,您可以用戶 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> 
} 

也可以更改@Html.LabelFor@Html.TextBoxFor

+0

謝謝烏斯曼!你對Html.LabelFor和Html.TextBoxFor是正確的。正如斯蒂芬指出的那樣,我的POST行爲中的參數類型也有問題。我的第一個MVC項目。感謝您的輸入! –

+0

如果有幫助,您可以接受答案。如果你不知道如何檢查這個https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Usman