Это нормально. Связыватель модели по умолчанию больше не может создавать экземпляр вашей модели представления, так как он не имеет конструктора без параметров. Вам нужно будет написать пользовательский механизм связывания моделей, если вы хотите использовать модели представлений, у которых нет конструктора по умолчанию.
Обычно вам не нужен такой пользовательский конструктор. Вы могли бы просто иметь свою модель вида так:
public class EditViewModel()
{
public int RequestId { get; set; }
}
и подобное действие POST:
[HttpPost]
public ActionResult Edit(EditViewModel viewModel)
{
// some code here...
}
и теперь все, что вам нужно сделать, это POST параметр requestId
вместо req
, и связыватель модели по умолчанию выполнит эту работу.
И если по какой-то причине вы хотели использовать модель представления с настраиваемым конструктором, вот пример того, как может выглядеть привязка настраиваемой модели:
public class EditViewModelBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
var req = bindingContext.ValueProvider.GetValue("req");
if (req == null)
{
throw new Exception("missing req parameter");
}
int reqValue;
if (!int.TryParse(req.AttemptedValue, out reqValue))
{
throw new Exception(string.Format("The req parameter contains an invalid value: {0}", req.AttemptedValue));
}
return new EditViewModel(reqValue);
}
}
который будет зарегистрирован в вашем Application_Start
:
ModelBinders.Binders.Add(typeof(EditViewModel), new EditViewModelBinder());