Контроллер 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объектtostring`:

 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)
Другие вопросы по тегам