Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 表单中的值不';t通过查看MVC_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 表单中的值不';t通过查看MVC

Asp.net mvc 表单中的值不';t通过查看MVC,asp.net-mvc,Asp.net Mvc,有人能说出我的代码中的错误吗?我已经为此寻找了好几天的解决方案,但都找不到。表单中的值不会传递给视图,只有“硬编码”的值(如OrderDate、CompanyID等)才会添加到数据库中。 我正在制作我的第一个MVC在线商店,并与之斗争了很多 编辑:要查看的数据来自db.Selection,但我需要使用其他参数将数据保存到模型db.Cart。也许FormCollection不是这样做的正确方法,但它是什么呢 NVC控制器: public ActionResult Index() {

有人能说出我的代码中的错误吗?我已经为此寻找了好几天的解决方案,但都找不到。表单中的值不会传递给视图,只有“硬编码”的值(如OrderDate、CompanyID等)才会添加到数据库中。 我正在制作我的第一个MVC在线商店,并与之斗争了很多

编辑:要查看的数据来自db.Selection,但我需要使用其他参数将数据保存到模型db.Cart。也许FormCollection不是这样做的正确方法,但它是什么呢

NVC控制器:

public ActionResult Index()
        {
            return View(db.Selection);
        }

    public ActionResult AddtoCart()
    {
        return View("AddtoCart");
    }

    [HttpPost]
    [ValidateAntiForgeryToken()]
    public ActionResult AddtoCart(FormCollection form)
    {
        string Author = form["Author"];
        string ISBN = form["ISBN"];
        string BookName = form["BookName"];
        string Publisher = form["Publisher"];
        string Price = form["Price"];

        var cart = new Cart();
        cart.Orderdate = DateTime.Now;
        cart.CompanyID = 12345;
        cart.ISBN = Convert.ToInt32(ISBN);
        cart.BookName = BookName;
        cart.Price = Convert.ToInt32(Price);
        cart.IsInCart = true;
        cart.Author = Author;
        cart.Publisher = Publisher;
        cart.SentToJvs = false;
        cart.Reference = "NV kevät 1999";

        db.Cart.Add(cart);
        db.SaveChanges();

        return RedirectToAction("Index");
    }
看法

@model IEnumerable
@使用STGchannelMVC.Controllers
@{
ViewBag.Title=“Index”;
}
@使用(Html.BeginForm(“AddtoCart”、“NV”、FormMethod.Post))
{

利萨图埃特奥斯科林酒店

@Html.AntiForgeryToken() @DisplayNameFor(model=>model.BookID) @DisplayNameFor(model=>model.ISBN) @DisplayNameFor(model=>model.Author) @DisplayNameFor(model=>model.BookName) @DisplayNameFor(model=>model.Publisher) @DisplayNameFor(model=>model.Price) @foreach(模型中的var项目) { @DisplayFor(modelItem=>item.BookID) @DisplayFor(modeleItem=>item.ISBN) @DisplayFor(modeleItem=>item.Author) @DisplayFor(modelItem=>item.BookName) @DisplayFor(modelItem=>item.Publisher) @DisplayFor(modelItem=>item.Price) 添加到购物车 } } @节脚本{ @Scripts.Render(“~/bundles/jqueryval”) }
模型

公共类购物车
{
公共int-OrderID{get;set;}
公共可为空的Orderdate{get;set;}
[显示(Name=“CompanyID”)]
公共可为空的CompanyID{get;set;}
[显示(Name=“ISBN”)]
公共可空ISBN{get;set;}
[显示(Name=“BookName”)]
公共字符串BookName{get;set;}
[显示(Name=“价格”)]
公共可空价格{get;set;}
公共可空IsInCart{get;set;}
[显示(Name=“Author”)]
公共字符串作者{get;set;}
[显示(Name=“Publisher”)]
公共字符串发布程序{get;set;}
公共可为空的SentToJvs{get;set;}
公共字符串引用{get;set;}
}

这个问题/答案可以更好地解释:

基本上你有两个选择:

在您看来,您可以继续使用
@Html.DisplayFor()
,但在
foreach
循环中添加
@Html.HiddenFor()
。这没有多大意义,因为用户无法更改值

@foreach (var item in Model)
    {
    @Html.HiddenFor(modelItem => item.BookID)
    @Html.HiddenFor(modelItem => item.ISBN)
    @Html.HiddenFor(modelItem => item.Author)
    @Html.HiddenFor(modelItem => item.BookName)
    @Html.HiddenFor(modelItem => item.Publisher)
    @Html.HiddenFor(modelItem => item.Price)
        <tr>
            <td hidden>
                @Html.DisplayFor(modelItem => item.BookID)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ISBN)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Author)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.BookName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Publisher)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Price)
            </td>
            <td>
                <button type="submit" class="btn btn-primary">Add to Cart</button>
            </td>
        </tr>
    }
@foreach(模型中的变量项)
{
@Html.HiddenFor(modeleItem=>item.BookID)
@Html.HiddenFor(modeleItem=>item.ISBN)
@Html.HiddenFor(modeleItem=>item.Author)
@Html.HiddenFor(modelItem=>item.BookName)
@Html.HiddenFor(modeleItem=>item.Publisher)
@Html.HiddenFor(modeleItem=>item.Price)
@DisplayFor(modelItem=>item.BookID)
@DisplayFor(modeleItem=>item.ISBN)
@DisplayFor(modeleItem=>item.Author)
@DisplayFor(modelItem=>item.BookName)
@DisplayFor(modelItem=>item.Publisher)
@DisplayFor(modelItem=>item.Price)
添加到购物车
}

或者不要使用
@Html.DisplayFor()
,而是使用
@Html.TextboxFor
,因为
DisplayFor
不会呈现用户可以交互的输入元素,而
TextboxFor
会呈现输入元素。

您确定要将正确的模型传递给控制器吗?看起来它需要一个
表单收集表单
不,我不确定=D我知道我的代码出了问题,可能就是这样。。我必须看一下,或者如果你对此有答案,请让我知道。当你做表单时,你传递给控制器的模型是viewmodel,在这种情况下,它似乎是
选择
,但控制器方法需要模型
FormCollection
public class Cart
    {
        public int OrderID { get; set; }
        public Nullable<System.DateTime> Orderdate { get; set; }

        [Display(Name = "CompanyID")]
        public Nullable<long> CompanyID { get; set; }

        [Display(Name = "ISBN")]
        public Nullable<long> ISBN { get; set; }

        [Display(Name = "BookName")]
        public string BookName { get; set; }

        [Display(Name = "Price")]
        public Nullable<decimal> Price { get; set; }
        public Nullable<bool> IsInCart { get; set; }

        [Display(Name = "Author")]
        public string Author { get; set; }

        [Display(Name = "Publisher")]
        public string Publisher { get; set; }
        public Nullable<bool> SentToJvs { get; set; }
        public string Reference { get; set; }
    }
@foreach (var item in Model)
    {
    @Html.HiddenFor(modelItem => item.BookID)
    @Html.HiddenFor(modelItem => item.ISBN)
    @Html.HiddenFor(modelItem => item.Author)
    @Html.HiddenFor(modelItem => item.BookName)
    @Html.HiddenFor(modelItem => item.Publisher)
    @Html.HiddenFor(modelItem => item.Price)
        <tr>
            <td hidden>
                @Html.DisplayFor(modelItem => item.BookID)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ISBN)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Author)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.BookName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Publisher)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Price)
            </td>
            <td>
                <button type="submit" class="btn btn-primary">Add to Cart</button>
            </td>
        </tr>
    }