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