如何将可选参数传递给ActionResult

Joe*_*Joe 7 c# asp.net-mvc-3

这有效:

public ActionResult Edit(int id, CompPhone cmpPhn)
{
  var vM = new MyViewModel();
  if (cmpPhn != null) { vM.CmpPhnF = cmpPhn; }
  ...
}
Run Code Online (Sandbox Code Playgroud)

如果我让cmpPhn可选:

public ActionResult Edit(int id, CompPhone? cmpPhn)
Run Code Online (Sandbox Code Playgroud)

我得到"错误1类型'MyProject.Models.CompPhone'必须是不可为空的值类型,以便在泛型类型或方法'System.Nullable'中将其用作参数'T'.

如何使该方法的输入参数可选?

这是视图模型

public class MyViewModel : IValidatableObject
{
...
public CompPhone CmpPhnF { get; set; }    
...
}
Run Code Online (Sandbox Code Playgroud)

通话方式

[HttpPost, ValidateAntiForgeryToken]
public ActionResult PhoneTest(MyViewModel vM)
{
  if (ModelState.IsValid)
  { var cmpPhn = vM.CmpPhnF;
  return RedirectToAction("Edit", new { id = vM.AcntId, cmpPhn });
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

Hab*_*bib 12

你没有选择它,你正在制作它nullable.要使其可选,您需要为参数定义默认值.(仅适用于C#4.0或更高版本):

public ActionResult Edit(int id, CompPhone cmpPhn = null)
Run Code Online (Sandbox Code Playgroud)

您当前的代码是指定的Nullable,它似乎CompPhone 是一个类而不是值类型,并且不能Nullable.

CompPhone? cmpPhn相当于应该在Nullable<CompPhone>哪里CompPhonestruct