【发布时间】:2013-11-12 05:08:24
【问题描述】:
我的控制器无法获取从控制器传回的模型。我花了整个上午都想不通,如果有人可以帮助我,请拨出它。谢谢!!!
补充:我有点效仿这个例子,它只有表单标签而不是ajax表单
MVC4 Passing model from view to controller
型号 这是一个产品实体列表,我正在使用 .net 实体框架进行数据库访问
public class VM_Products
{
public List<FMST_Product> Products { get; set; }
}
控制器
private FMSTEntities ctx = new FMSTEntities();
public ActionResult Index()
{
VM_Products vmps = new VM_Products();
vmps.Products = ctx.FMST_Product.ToList();
return View("Index", vmps);
}
// when I step in, the SelectedProducts is always null ???
public ActionResult AddToCart(FMST_Product SelectedProducts)
{
return View();
}
查看
@using FMST
@using FMST.Models
@model VM_Products
<ul id="products" class="list clear">
@foreach (var p in Model.Products)
{
<form action="POST" id=@p.ProductID>
<li class="clearfix">
@p.ProductID
<br>
@p.ProductName
<br>
@p.ProductDesc
<br>
@p.ProductPrice
<span class="darkview">
@Html.ActionLink("Add To CT","AddToCart","Product",p);
</span>
</li>
</form>
}
</ul>
【问题讨论】:
-
其中一个问题(我认为不止 1 个)是您正在使用
@Html.ActionLink并希望它像POST一样工作,但ActionLink创建了一个<a>标签所以只有GET,如果你想POST,你需要使用表单或AJAX。 -
如果您将页面放在表单标签中并使用提交按钮,模型将自动传回正如其他人所说,如果您希望模型在没有回发的情况下返回,您将需要进行 ajax 调用并在 jquery 中构建模型
-
如果您看一下您正在遵循的示例,他实际上并没有发布任何内容,
ActionLink只是参数化对象(在您的情况下为product)并将其传递给控制器作为QueryString的一部分的操作。 -
我可以通过将 ActionLink 更改为 @Html.ActionLink("Add to cart", "AddToCart", "Product", new { productid = p.ProductID }, ""),传递整个产品对象并将其放入控制器中仍然没有运气