在提交时从View查找带有参数的Action时出错

时间:2011-02-24 07:45:39

标签: asp.net asp.net-mvc asp.net-mvc-3

我正在使用以下代码,我很惊讶它给了我错误信息:

  

没有为此对象定义无参数构造函数。

  public ActionResult CreateEmployee(int ID, string Name)
    {
        Employee model = new Employee(ID, Name);
        return View(model);
    }

    [HttpPost]
    public ActionResult CreateEmployee(Employee model)
    {
        try
        {
            return RedirectToAction("Tasks");
        }
        catch (Exception e)
        {
            ModelState.AddModelError("Error", e.Message);
            return View(model);
        }
    }
public ActionResult Tasks(int ID, string Name)
    {
        EmployeeListModel model = new EmployeeListModel(ID, projectName);
        return View(model);
    }

CreateEmployee的视图:

    @model MvcUI.Models.Employee

@using (Html.BeginForm())
{
@Html.Partial("EmpDetails", Model)
 <p>  <input type="submit" value="Save" /></p> 
}

2 个答案:

答案 0 :(得分:0)

这是正常的。看起来Employee对象没有无参数构造函数,但您在POST操作中将它用作操作参数:

public ActionResult CreateEmployee(Employee model)

调用以从POSTed请求值绑定Employee对象的默认模型绑定器不可能知道如何实例化它。您可以为此对象提供无参数构造函数,也可以编写自定义模型绑定器。

答案 1 :(得分:0)

看起来您的Employee类没有定义无参数构造函数。您应该定义无参数构造函数

public class Employee {

  //parameterless constructor
  public Employee() {

  }

  //your constructor
  public Employee(int id, string name) {

  }

}

默认模型绑定器使用无参数构造函数在CurrentEmployee操作中实例化对象。否则它不知道如何实例化你的对象。

或者,您可以创建自定义模型绑定器来创建和绑定Employee对象。