Контроллер MVC, модель с таким же эквивалентным входящим параметром, недействительна
Мне интересно, как задать этот вопрос, но как-то я должен...
TL; DR. Я работал над системой, переданной мне кем-то другим, работавшей где-то, что они пришли со своим проводным запросом и идеей. так что я сказал: давайте сделаем X и сделаем это, но когда я просто запустил это, я увидел, что это не сработало, как раньше... отладка приложения, я дошел до места, тестирую тестирование, тестирую и смотрю, как моя голова разбилась об этом целый день, и единственное, что я могу сказать, почему все правильно, почему данные существуют, почему они действительны, и все же контроллер говорит, что они недействительны:|
Что ж. Сегодня я вернулся к тому же проекту, к тому же вопросу, и вот что я увидел:
это мой отправленный запрос:
{
"Code" : 16,
"StampForm" : {
"$error" : {},
"$name" : "stampForm",
"$dirty" : true,
"$pristine" : false,
"$valid" : true,
"$invalid" : false,
"$submitted" : true,
"confirmUser" : {
"$viewValue" : "a",
"$modelValue" : "a",
"$validators" : {},
"$asyncValidators" : {},
"$parsers" : [],
"$formatters" : [null],
"$viewChangeListeners" : [],
"$untouched" : false,
"$touched" : true,
"$pristine" : false,
"$dirty" : true,
"$valid" : true,
"$invalid" : false,
"$error" : {},
"$name" : "confirmUser",
"$options" : null
},
"ReqNo" : "2",
"ConfirmUser" : "a",
"SabtDate" : "1395/06/15"
},
"MouseData" : {
"locLeft" : 250.5,
"locTop" : 395.53125,
"width" : 812,
"height" : 663,
"mouseX" : 223.5,
"mouseY" : 186.46875
}
}
И модель, которую я использую:
public class StampForm
{
public string ReqNo { get; set; }
public string SabtDate { get; set; }
public string FlightRef { get; set; }
public string HotelRef { get; set; }
public string ConfirmUser { get; set; }
public string PassengerNum { get; set; }
public string Price { get; set; }
public string FlightNo1 { get; set; }
public string FlightNo2 { get; set; }
public string TicketSrv { get; set; }
public string VoucherSrv { get; set; }
/// <summary>
/// تنظیم کننده
/// </summary>
public string Corrector { get; set; }
/// <summary>
/// اقامت
/// </summary>
public string Stay { get; set; }
public string PersonPrc { get; set; }
public string RoomPrc { get; set; }
public CartableStampPositions Position { get; set; }
public string Description { get; set; }
}
public class MouseData
{
public float LocLeft { get; set; }
public float LocTop { get; set; }
public float LocRight { get; set; }
public float LocBottom { get; set; }
public float Width { get; set; }
public float Height { get; set; }
public float MouseX { get; set; }
public float MouseY { get; set; }
}
public class StampVM
{
public int Code { get; set; }
public StampForm StampForm { get; set; }
public MouseData MouseData { get; set; }
}
И вот пока я отлаживаю:
Вы это видите? "ConfirmUser" заполняется "а" и генерирует ошибку, но более того, это не "ConfirmUser", это "verifyUser", которые начинаются с маленького "c" и происходят из другого углового объекта, который имеет то же имя, даже не существует в моей модели, но, поскольку у него такое же имя, контроллер впускает его и позволяет ему участвовать. вызывает у меня много проблем и головной боли. теперь, когда я поймал это, я должен решить это, но как я должен сказать контроллеру игнорировать это?
Обновление, я забыл упомянуть, что говорю вам, что я использовал контроллер MVC.Net WebAPI 2, а не контроллер MVC
2 ответа
Для этого есть обходной путь - добавьте свойство JObject confirmUser' in your viewmodel so that the (unwanted) confirm user object binds to that object instead of Model binder trying to bind that
объектto
string`:
public class StampForm
{
public string ReqNo { get; set; }
public string SabtDate { get; set; }
public string FlightRef { get; set; }
public string HotelRef { get; set; }
public string ConfirmUser { get; set; }
[JsonProperty("confirmUser")]
public JObject User { get; set; }
..........
}
Вы можете добавить следующий атрибут к методу
[Bind(Exclude = "ConfirmUser")]
Так что это выглядит так;
public ActionResult MyMethod([Bind(Exclude = "ConfirmUser")] MyModel model)