Как передать необязательный параметр в ActionResult
это работает:
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.Модели.CompPhone "должен быть типом значения, не имеющим значения null, чтобы использовать его в качестве параметра" 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 });
}
...
}
2 ответов
вы не делаете это необязательным, вы делаете это nullable
. Чтобы сделать его необязательным, необходимо определить значение по умолчанию для параметра. (Доступно только для C# 4.0 или выше):
public ActionResult Edit(int id, CompPhone cmpPhn = null)
ваш текущий код указывает быть Nullable
и кажется, что CompPhone
является классом, а не типом значения, и не может быть Nullable
.
CompPhone? cmpPhn
эквивалентно Nullable<CompPhone>
здесь CompPhone
должно быть struct
Я согласен с Хабибом, вы делаете параметр nullable
.
чтобы сделать параметр необязательным, определите два идентичных метода: один с параметром и один без. Тот, у кого нет, должен будет использовать для него предопределенное значение по умолчанию.
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; }
...
}