邮政形式总是返回null
问题描述:
我在ASP.NET的MVC 4的应用程序如下:邮政形式总是返回null
1.ProductsController.cs
namespace MvcApplication2.Controllers
{
public class ProductsController : Controller
{
//
// GET: /Products/
[HttpGet]
public ActionResult Products()
{
List<Product> prList = new List<Product>();
Product p1 = new Product();
p1.ProductName = "J & J";
p1.Price = 40;
p1.Ratings = 5;
prList.Add(p1);
Product p2 = new Product();
p2.ProductName = "Himalaya";
p2.Price = 20;
p2.Ratings = 2;
prList.Add(p2);
return View(prList);
}
[HttpPost]
public ActionResult Products(FormCollection prList,List<MvcApplication2.Models.Product> fg)
{
return View(prList);
}
}
}
2. ProductList.cs
namespace MvcApplication2.Models
{
public class Product
{
public string ProductName { get; set; }
public int Price { get; set; }
public int Ratings { get; set; }
}
}
3. Products.cshtml
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Products</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
<script src="~/Scripts/jquery-3.2.1.min.js"></script>
</head>
@model IEnumerable<MvcApplication2.Models.Product>
@using (@Html.BeginForm("Products", "Products", FormMethod.Post))
{
<body>
<div style="width:100%;height:100%;position: relative ">
<div style="width:100%;top:0px;height:40px;position:relative;background-color:purple">
<input type="submit" value="Sort price" style="float : right;width:30px;" id="SearchId" />
@Html.TextBox("Search Box", null, new { @style = "float:right;width:80px "});
<input type="submit" value="submit" />
</div>
<div id="tableDiv">
<table id="tableId">
<tr>
<th>Name</th>
<th>Price in Rs.</th>
<th>Ratings</th>
</tr>
@foreach (var drawing in Model)
{
<tr>
<td>@drawing.ProductName</td>
<td>@drawing.Price</td>
<td>@drawing.Ratings</td>
</tr>
}
</table>
</div>
</div>
</body>
}
</html>
每当我浏览到http://localhost:5858/Products/Products,点击和提交的控逆变谈到在产品的方法[HttpPost]
,但该模型始终是空的。
这是什么,我在这里失踪?我期待在页面加载时返回相同的模型,为什么模型变空了?
答
的模型是空的,因为你的形式不包含除搜索框以外的任何输入元素:
@Html.TextBox("Search Box", null, new { @style = "float:right;width:80px "})
这样被发送到服务器的唯一的事情就是在这个搜索框中输入的值。您无法期望在您的发布操作中获得List<Product>
。由于是不应该这样的信息由客户端进行修改,所有你需要做的就是在你的POST操作来获取这个名单你在你的GET动作做的方式一样:
[HttpGet]
public ActionResult Products()
{
var prList = this.GetProducts();
return View(prList);
}
[HttpPost]
public ActionResult Products(FormCollection fc)
{
var prList = this.GetProducts();
// TODO: based on the search parameter sent from the client
// here you probably want to filter the prList before passing it
// back to the view
return View(prList);
}
private List<Product> GetProducts()
{
List<Product> prList = new List<Product>();
Product p1 = new Product();
p1.ProductName = "J & J";
p1.Price = 40;
p1.Ratings = 5;
prList.Add(p1);
Product p2 = new Product();
p2.ProductName = "Himalaya";
p2.Price = 20;
p2.Ratings = 2;
prList.Add(p2);
return prList;
}
你只是张贴'Search_Box' ,所以没有什么可以绑定的。使用'@ Html.EditorFor(m => ...)'。 – CodeCaster