如何将数据从MVC视图获取到控制器

时间:2017-07-04 00:32:12

标签: asp.net-mvc asp.net-mvc-5

我正在研究一个简单的项目。以下是代码。问题是我无法从视图中获取控制器的所有信息。所以我已经在Homecontroller中拥有书籍ID,名称和价格(来自单独的Productcontroller),我也可以查看它,我想在发帖请求时发布书籍数量。因此,当我尝试发布帖子请求并进行调试时,我只能看到数量,我看到书籍ID,名称和价格为空。

我不确定出了什么问题。任何帮助将非常感激。 谢谢!

1.Product.cs

public class Product
    {
        public int ProductID { get; set; }
        public string ProductName { get; set; }
        public decimal ProductPrice { get; set; }
        public int Quantity { get; set; }
    }

2.Cart.cshtml

@model DAL.Models.Product
@{
    ViewBag.Title = "Purchase";
}

@ViewBag.bookName
<h2>Purchase</h2>

<div class="row">
    <div class="col-md-3"></div>
    <div class="col-md-6">
        @using (Html.BeginForm("Cart", "Home", FormMethod.Post))
        {        
            <div class="panel panel-primary">

                <div class="panel-heading">Purchase Book</div>
                <div class="panel-body">
                    <div>
                        <dl class="dl-horizontal">
                            <dt>
                                @Html.DisplayNameFor(model => model.ProductName)
                            </dt>

                            <dd>
                                @Html.DisplayFor(model => model.ProductName)
                            </dd>

                            <dt>
                                @Html.DisplayNameFor(model => model.ProductPrice)
                            </dt>

                            <dd>
                                @Html.DisplayFor(model => model.ProductPrice)
                            </dd>

                        </dl>
                    </div>
                    @Html.LabelFor(model => model.Quantity, htmlAttributes: new { @class = "control-label col-md-2" })
                    <div class="col-md-10">                      
                        @Html.EditorFor(model => model.Quantity, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => model.Quantity, "", new { @class = "text-danger" })
                    </div><br />

                    <div class="col-md-10">
                        <input type="submit" value="Submit" class="btn btn-default"/>
                    </div>
                </div>
            </div>
        }
    </div>
    <div class="col-md-3"></div>
</div>

以下是截图:

This is the screenshot of what I'm trying to do

2 个答案:

答案 0 :(得分:1)

POST中只包含可编辑的值(您使用的是@ Html.EditorFor等)。要在POST中包含其他值,只需使用@ Html.HiddenFor()帮助程序。

例如:

@Html.HiddenFor(model => model.ProductID)
@Html.HiddenFor(model => model.ProductName)
@Html.HiddenFor(model => model.ProductPrice)

这些将被传回并在控制器中可用。

答案 1 :(得分:1)

嗨Marshall我希望你能从上面的doug knudsen回答得到解决方案,所以我想在此向您展示,Why DisplayFor does not post values to Action Method?

简答:DisplayFor不呈现属性的输入字段,而editorfor和hiddenfor呈现输入字段。这就是你没有在帖子中获得价值的原因。

希望它能帮助你理解更多。

由于

KARTHIK