Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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# ASP.NET MVC模型绑定器不绑定我的ViewModel_C#_Asp.net_Asp.net Mvc_Model Binding - Fatal编程技术网

C# ASP.NET MVC模型绑定器不绑定我的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++) {

这是我的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++)
{
        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);
    }
}