Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模型在HTTP POST上为空_C#_Asp.net Mvc_Razor_Http Post - Fatal编程技术网

C# 模型在HTTP POST上为空

C# 模型在HTTP POST上为空,c#,asp.net-mvc,razor,http-post,C#,Asp.net Mvc,Razor,Http Post,控制器 [HttpPost] public ActionResult SaveProduct(string id, AddProductViewModel m) { if (ModelState.IsValid) { using (ComparisonDBDataContext CMP = new ComparisonDBDataContext()) { tblProduct prod = (from c in CMP.tb

控制器

[HttpPost]
public ActionResult SaveProduct(string id, AddProductViewModel m)
{
    if (ModelState.IsValid)
    {
        using (ComparisonDBDataContext CMP = new ComparisonDBDataContext())
        {
            tblProduct prod = (from c in CMP.tblProducts
                               where c.ProductID == Guid.Parse(id)
                               select c).SingleOrDefault();
            prod.Name = m.myName;
            prod.CategoryID = Guid.Parse(m.myCategory);
            prod.ManufacturerID=Guid.Parse(m.myManufacturer);
            CMP.SubmitChanges();
        }
        return RedirectToAction("Products");
    }
    else
    {
        m.ProductID = Guid.Parse(id);
        return View("EditProduct", m);
    }
}
看法

@model Comparison.Models.AddProductViewModel
@{
ViewBag.Title=“EditProduct”;
Layout=“~/Views/\u LayoutData.cshtml”;
}
.字段验证错误{
颜色:黑色;
}
.验证摘要错误{
字体大小:粗体;
颜色:黑色;
}
编辑产品
@使用(Html.BeginForm(“SaveProduct”,“Home”,new{id=@Model.ProductID},FormMethod.Post))
{
@Html.AntiForgeryToken()

@Html.ValidationSummary(true) 名称 @TextBoxFor(m=>m.myName,新的{@class=“form control”}) @Html.ValidationMessageFor(m=>m.myName) 类别 @DropDownListFor(m=>m.myCategory,Model.Category,new{@class=“form control”}) @Html.ValidationMessageFor(m=>m.myCategory) 制造商 @DropDownListFor(m=>m.myManufacturer,Model.Manufacturer,new{@class=“form control”}) @Html.ValidationMessageFor(m=>m.myManufacturer) } @ActionLink(“返回列表”、“产品”)
视图模型

public Guid? myUserID;

        [Required(ErrorMessage="Required")]
        public string myCategory;
        public List<SelectListItem> category = new List<SelectListItem>();
        public List<SelectListItem> Category
        {
            get
            {

                category.Clear();
                using (ComparisonDBDataContext CMP = new ComparisonDBDataContext())
                {
                    var cat = from g in CMP.tblCategories
                              select new { g.Name, g.CategoryID };
                    foreach (var q in cat)
                    {
                        category.Add(new SelectListItem() { Text = q.Name, Value = q.CategoryID.ToString() });
                    }
                    return category;
                }
            }
        }
        public Guid? ProductID;

        [Required(ErrorMessage = "Required")]
        public string myManufacturer;
        public List<SelectListItem> manufacturer = new List<SelectListItem>();
        public List<SelectListItem> Manufacturer
        {
            get
            {

                category.Clear();
                using (ComparisonDBDataContext CMP = new ComparisonDBDataContext())
                {
                    var manu = from g in CMP.tblManufacturers
                              select new { g.Name, g.ManufacturerID };
                    foreach (var q in manu)
                    {
                        manufacturer.Add(new SelectListItem() { Text = q.Name, Value = q.ManufacturerID.ToString() });
                    }
                    return manufacturer;
                }
            }
        }

        [Required(ErrorMessage = "Required")]
        [StringLength(100, ErrorMessage = "Maximum lenght can be 100")]
        public string myName;

        public DateTime? CreationDate;
公共Guid?myUserID;
[必需(ErrorMessage=“必需”)]
公共字符串类别;
公共列表类别=新列表();
公开名单类别
{
得到
{
类别。清除();
使用(ComparisonDBDataContext CMP=new ComparisonDBDataContext())
{
var cat=来自CMP.TBL类别中的g
选择新的{g.Name,g.CategoryID};
foreach(cat中的var q)
{
添加(新的SelectListItem(){Text=q.Name,Value=q.CategoryID.ToString()});
}
退货类别;
}
}
}
公共Guid?ProductID;
[必需(ErrorMessage=“必需”)]
公共字符串制造商;
公共列表制造商=新列表();
公开名单制造商
{
得到
{
类别。清除();
使用(ComparisonDBDataContext CMP=new ComparisonDBDataContext())
{
var manu=来自CMP.TBL制造商中的g
选择新{g.Name,g.ManufacturerID};
foreach(手动变量q)
{
Add(新的SelectListItem(){Text=q.Name,Value=q.ManufacturerID.ToString()});
}
退货制造商;
}
}
}
[必需(ErrorMessage=“必需”)]
[StringLength(100,ErrorMessage=“最大长度可以是100”)]
公共字符串myName;
公共约会时间?肌酐;
我试过用谷歌搜索,但找不到任何解决办法


我知道已经有人问过类似的问题,但我无法从中找到解决方案。所以请检查我的代码,告诉我我做错了什么。为什么回发时我的模型为空?

您的视图模型包含只有getter的属性(在某些情况下,它们只是没有任何getter或setter的字段),因此
DefaultModelBinder
无法设置其值。这是必须的

public string myName { get; set; }
旁注:视图模型不应包含数据库访问代码。它应该是简单的

public List<SelectListItem> manufacturer { get; set; }
公共列表制造商{get;set;}

控制器应负责将集合分配给属性

视图模型包含的属性只有getter(在某些情况下,它们只是没有任何getter或setter的字段),因此
DefaultModelBinder
无法设置它们的值。这是必须的

public string myName { get; set; }
旁注:视图模型不应包含数据库访问代码。它应该是简单的

public List<SelectListItem> manufacturer { get; set; }
公共列表制造商{get;set;}

控制器应负责将集合分配给属性

您还可以提供viewmodel吗?尝试从
BeginForm
中删除HTML属性,并为您的ProductID字段设置一个
HiddenFieldFor
。是
m
null还是仅为模型的属性?模型的属性为null您的属性上没有getter/setter(实际上它们是字段)因此,
DefaultModelBinder
无法设置它们。并且不要将数据库访问代码放在视图模型中(它应该只包含带有
get;set;
-控制器负责设置它们的简单属性)您还可以提供viewmodel吗?尝试从
BeginForm
中删除HTML属性,并为您的ProductID字段设置一个
HiddenFieldFor
。是
m
null还是仅为模型的属性?模型的属性为null您的属性上没有getter/setter(实际上它们是字段)因此,
DefaultModelBinder
无法设置它们。并且不要将数据库访问代码放在视图模型中(它应该只包含带有
get;set;
-控制器负责设置它们的简单属性)