Asp.net mvc 在Asp.net MVC中查看不返回多个列表
我是新的网络从桌面 我有两个模型 首先Asp.net mvc 在Asp.net MVC中查看不返回多个列表,asp.net-mvc,razor,asp.net-mvc-5,Asp.net Mvc,Razor,Asp.net Mvc 5,我是新的网络从桌面 我有两个模型 首先 public class Item { public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } public double Price { get; set; } public double Stock { get;
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public double Price { get; set; }
public double Stock { get; set; }
public Category Category { get; set; }
public string ImagePath { get; set; }
}
其次是
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public bool isSelected { get; set; }
}
以及一个ViewModel,用于将其传递给我的视图
public class ProductsVM
{
public IList<Item> items { get; set; }
public IList<Category> categories { get; set; }
}
在我看来,我是这样使用它的
[HttpGet]
public ActionResult Products()
{
ViewBag.Message = "...Products...";
ProductsVM productsVm = new ProductsVM();
productsVm.items = db.Items.ToList();
productsVm.categories = db.Categories.ToList();
return View(productsVm);
}
[HttpPost]
public ActionResult Products(ProductsVM model)
{
ViewBag.Message = "...Categories...";
return View(model);
}
@using (Html.BeginForm())
{
<div class="row">
<div class="col-md-2">
@foreach (var it in Model.categories.ToList())
{
<div class="input-group">
@Html.CheckBoxFor(i => it.isSelected, new { Name = "ChkCategory", id = "ChkCategory"+it.Id, @class = "Categories" }) @it.Name
@Html.HiddenFor(i => it.Name)
</div>
}
</div>
@*Loading Items...*@
<div class="col-md-10">
@for (int i = 0; i < Model.items.Count() / 3; i++)
{
<div class="row">
@foreach (var item in Model.items.Skip(i * 3).Take(3))
{
<div class="col-md-4 col-sm-6 col-xs-12">
<img src="@Url.Content(item.ImagePath)" alt="@item.Description" class="thumbnail" />
</div>
}
</div>
}
</div>
</div>
<input type="submit" value="submit" />
}
@section scripts
{
<script src="~/Scripts/Products.js"></script>
}
这是您的产品SVM:
当您提交表单时,它将获取表单控件中的值,并使用控件的名称将其发布到Products操作。在视图表单中,有一个名为chkCategory的复选框和一个名为chkCategory的隐藏输入。当您发布表单时,它将发送chkCategory及其值,以及名为的隐藏项。当它到达服务器端时,MVC将在控制器中查找名为Products的操作方法。然后,默认绑定器将尝试查找chkCategory和Name属性,以查看操作是否接受它们。它找不到它。然后,它将尝试查看是否可以创建ProductsVM,但它不能,因为ProductsVM有两个属性:项目和类别,它们与您发布的内容不匹配,因此它将选择该操作并将其传递为null
您的代码中有许多问题,并且它不能很好地与整个MVC框架配合使用。我建议您阅读并尝试一些简单的示例来掌握它,然后尝试您正在做的事情。展示您的产品。jsyup如果您展示您的产品。js这将有助于我们进行调试。感谢除了重复之外,您不能使用foreach循环,不要试图更改名称属性。先生,如果您想了解更多有关MVC Model Binder工作原理的信息,请证明其他链接,您提供的链接已断开。我几乎不理解你的回答。谢谢你,先生。@Jardepkarena我更改了链接,现在应该可以工作了。只有谷歌。希望有帮助。
$(function () {
console.log('Inside js......');
$('.Categories').click(function (e) {
console.log(this.id, $("#" + this.id).is(":checked"));
$.ajax({
type: "POST",
url: "/Home/Products",
success: function () {
console.log("ajax successfull....");
},
error: function () {
console.log("ajax error....");
}
});
});
});
public class ProductsVM
{
public IList<Item> items { get; set; }
public IList<Category> categories { get; set; }
}
[HttpPost]
public ActionResult Products(ProductsVM model)