C# ASP.NET MVC模型绑定器不绑定我的ViewModel
这是我的viewModel,我正在将其绑定到视图C# ASP.NET MVC模型绑定器不绑定我的ViewModel,c#,asp.net,asp.net-mvc,model-binding,C#,Asp.net,Asp.net Mvc,Model Binding,这是我的viewModel,我正在将其绑定到视图 public class EmployeeMasterViewModel { public EmployeeViewModel Employee { get; set; } public List<SkillViewModel> Skills { get; set; } } 提交表单时,计数为0 @for (int i = 0; i < Model.Skills.Count; i++) {
public class EmployeeMasterViewModel
{
public EmployeeViewModel Employee { get; set; }
public List<SkillViewModel> Skills { get; set; }
}
提交表单时,计数为0
@for (int i = 0; i < Model.Skills.Count; i++)
{
SkillViewModel skill = Model.Skills[i];
string id = skill.Id + "-" + String.Join("-", skill.SkillName.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries));
<tr id="@id">
<td>
@Html.HiddenFor(e => e.Skills[i].Id)
@Html.HiddenFor(e => e.Skills[i].SkillName)
@skill.SkillName
</td>
<td>
<a href="javascript:deleteSkill('@id')">
<span class="label label-sm label-danger">
Delete
</span>
</a>
</td>
</tr>
}
我试图复制您的问题,但我的尝试效果良好 视图代码 控制器代码
当我提交表单时,所有数据都正确传递,包括技能数据。也许您可以使用此答案作为参考来帮助您?您也可以发布您的操作方法吗?如果您的视图没有正确的@model语句,如果您的操作没有返回Viewmodel,则视图没有要绑定的Viewmodel。发布你的行动和观点。顺便说一句,当您定义一个模型时,它可以作为模型变量使用。技能从何而来?检查ModelState.IsValid和Errors集合以获取更多诊断信息。Mario-视图文件非常长Panagiotis Kanavos-当然,我也在view中定义了@model语句,GET操作也返回ViewMyEmployeeMasterViewModel我也用同样的方法做了,我有一个代码,它对其他业务实体运行良好,编写方式与前面提到的相同。实际上,我有一个与Skills同名的下拉列表,这与我的列表技能相冲突。是的,这是个愚蠢的错误
@for (int i = 0; i < Model.Skills.Count; i++)
{
SkillViewModel skill = Model.Skills[i];
string id = skill.Id + "-" + String.Join("-", skill.SkillName.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries));
<tr id="@id">
<td>
@Html.HiddenFor(e => e.Skills[i].Id)
@Html.HiddenFor(e => e.Skills[i].SkillName)
@skill.SkillName
</td>
<td>
<a href="javascript:deleteSkill('@id')">
<span class="label label-sm label-danger">
Delete
</span>
</a>
</td>
</tr>
}
public ActionResult Create()
{
ViewBag.CanCreateEmployee = Right.CanCreateEmployee;
ViewBag.Skills = Common.GetSkills();
var viewModel = new EmployeeMasterViewModel();
var employee = new EmployeeViewModel
{
Departments = Common.GetDepartments(),
Designations = Common.GetDesignations(),
Grades = Common.GetGrades(),
MaritalStatuses = Common.GetMaritalStatuses(),
Genders = Common.GetGenders(),
};
viewModel.Skills = new List<SkillViewModel>();
viewModel.Skills.Add(new SkillViewModel
{
Id = 1,
SkillName = "Test Driven Developement"
});
viewModel.Employee = employee;
return View(viewModel);
}
[HttpPost]
public ActionResult Create(EmployeeMasterViewModel viewModel, HttpPostedFileBase file)
{
if (!Right.CanCreateEmployee)
{
Session["ErrorNotify"] = "You don't have permission to add new employee";
return RedirectToAction("Index");
}
viewModel.Employee.Departments = Common.GetDepartments();
viewModel.Employee.Designations = Common.GetDesignations();
viewModel.Employee.Grades = Common.GetGrades();
viewModel.Employee.MaritalStatuses = Common.GetMaritalStatuses();
viewModel.Employee.Genders = Common.GetGenders();
viewModel.Skills = _model.GetEmployeeSkills();
ViewBag.Skills = Common.GetSkills();
ViewBag.CanCreateEmployee = Right.CanCreateEmployee;
if (!CheckErrors(viewModel))
{
return View(viewModel);
}
string image = Common.ImageUpload(file);
if (image == "0")
{
ModelState.AddModelError("ImageTypeError", "Image type not supported");
return View(viewModel);
}
viewModel.Employee.ImgPath = image;
_model.Insert(viewModel.Employee);
Session["SuccessNotify"] = "Employee is successfully registered";
return RedirectToAction("Index");
}
@model SO.Controllers.EmployeeMasterViewModel
@using (Html.BeginForm())
{
@Html.TextBoxFor(m => m.Employee.EmployeeName);
<input data-val="true" name="Skills[0].Id" type="hidden" value="1">
<input name="Skills[0].SkillName" type="hidden" value="Test Driven Developement">
<input type="submit" value="Save" />
}
public class HomeController : Controller
{
public ActionResult Index()
{
var vm = new EmployeeMasterViewModel();
vm.Employee = new EmployeeViewModel();
vm.Skills = new List<SkillViewModel>();
return View(vm);
}
[HttpPost]
public ActionResult Index(EmployeeMasterViewModel viewModel)
{
return View(viewModel);
}
}