9

これは機能します:

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

cmpPhnをオプションにした場合:

public ActionResult Edit(int id, CompPhone? cmpPhn)

「エラー1タイプ'MyProject.Models.CompPhone'は、ジェネリック型またはメソッド'System.Nullable'のパラメーター'T'として使用するために、null許容でない値型である必要があります。

メソッドへのこの入力パラメーターをオプションにするにはどうすればよいですか?

これがビューモデルです

public class MyViewModel : IValidatableObject
{
...
public CompPhone CmpPhnF { get; set; }    
...
}

メソッドの呼び出し

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

2 に答える 2

14

あなたはそれをオプションにしているのではなく、あなたはそれを作っていnullableます。オプションにするには、パラメータのデフォルト値を定義する必要があります。(C# 4.0 以降でのみ使用可能):

public ActionResult Edit(int id, CompPhone cmpPhn = null)

あなたの現在のコードは であると指定していますが、値型ではなくクラスNullableであると思われ、 ではありません。CompPhone Nullable

CompPhone? cmpPhnNullable<CompPhone>どこにあるCompPhoneべきかと同等ですstruct

于 2012-09-18T04:22:25.543 に答える
1

私はハビブに同意します、あなたはパラメータを作っていますnullable.

パラメーターをオプションにするには、2 つの同一のメソッドを定義します。1 つはパラメーターを使用し、もう 1 つはパラメーターを使用しません。ないものは、事前定義されたデフォルト値を使用する必要があります。

public ActionResult Edit(int id)
{
  var vM = new MyViewModel();
  vM.CmpPhnF = defaultValue;
  ...
}

public ActionResult Edit(int id, CompPhone cmpPhn)
{
  var vM = new MyViewModel();
  if (cmpPhn != null) { vM.CmpPhnF = cmpPhn; }
  ...
}
于 2012-09-18T04:43:38.290 に答える