包含相同参数的ViewResult和ActionResult出错

Ste*_*ven 4 c# asp.net asp.net-mvc overloading

在我的控制器中,我有一个Edit GET方法来显示视图,还有一个Edit POST方法来保存更改:

public ViewResult Edit(int id)
{
    //
}

[HttpPost]
public ActionResult Edit(int id)
{
    //
}
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误说:

类型'Controllers.MyController'已经定义了一个名为'Edit'的成员,它具有相同的参数类型

我该如何解决这个问题?

Jay*_*neT 5

您可以实现视图模型,以便包含希望用户能够编辑的所有字段的EditViewModel,并在Edit GET方法中返回该字段,并为视图模型提供强类型视图.那意味着在POST方法中你将EditViewModel作为参数传递,有点像这样:

[HttpGet]
public ViewResult Edit(int id)
{
    //build and populate view model
    var viewModel = new EditViewModel();
    viewModel.Id = id;
    viewModel.Name = //go off to populate fields

    return View("", viewModel)
}

[HttpPost]
public ActionResult Edit(EditViewModel viewModel)
{
    //use data from viewModel and save in database
}
Run Code Online (Sandbox Code Playgroud)

因此,您的GET和POST方法将具有不同的签名.希望这可以帮助.