我是桌面网络的新手。
我有两个模型。
第一的
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>
}
当我将 from 发布到控制器时,我已经尝试了所有方法来恢复我的模型
我正在使用我的 products.js 文件中的 ajax 发布 from on 复选框单击事件。
但在我的控制器操作方法中,它总是将 ViewModel 显示为 null。
我应该怎么办?难道我做错了什么。
产品.js
$(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....");
}
});
});
});
这是你的ProductsVM
:
public class ProductsVM
{
public IList<Item> items { get; set; }
public IList<Category> categories { get; set; }
}
这是您要发布的操作方法:
[HttpPost]
public ActionResult Products(ProductsVM model)
当您提交表单时,它将从表单的控件中获取值并使用控件的名称,将它们发布到Products
操作中。在您的视图(表单)中,您有一个带有 name 的复选框chkCategory
和一个带有 name的隐藏输入Name
。当您发布表单时,它将发送chkCategory
及其值,以及名称为 的隐藏项目Name
。当它到达服务器端时,MVC 将查找Products
在您的控制器中命名的操作方法。然后默认绑定器将尝试查找chkCategory
和Name
属性以查看操作是否接受它们。它不会找到它。然后它会尝试查看它是否可以创建一个ProductsVM
而它不能创建,因为它ProductsVM
有 2 个属性:items
和categories
并且它们与您发布的内容不匹配,因此它只会选择该操作并将其传递为空。
您的代码中有很多问题,并且它在整个 MVC 框架中的表现不佳。我建议你阅读理解 MVC 模型绑定并尝试一些简单的例子来掌握它,然后尝试你正在做的事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句