1

我想知道如何问这个问题,但不知何故我必须......

TL;博士。我曾在一个系统上工作过,由其他人传给我,在某个地方运行,他们带着他们的有线请求和想法来了。所以我说让我们做 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' 填充了“a”,它会产生错误,但更重要的是,它不是 'ConfirmUser',它是 'confirmUser' 以小 'c' 开头,并且来自其他具有相同名称的角度对象,它甚至在我的模型中不存在,但由于它具有相同的名称,控制器让它进来,让它参与进来。给我带来很多问题和头痛。现在我抓住了它,我必须解决它,但是我应该如何告诉控制器忽略它?

更新,我忘了告诉你我使用的是 MVC.Net WebAPI 2 控制器,而不是 MVC 控制器

4

2 回答 2

1

您可以将以下属性添加到方法中

[Bind(Exclude = "ConfirmUser")] 

所以它看起来像这样;

public ActionResult MyMethod([Bind(Exclude = "ConfirmUser")] MyModel model)
于 2016-09-05T07:59:38.453 回答
1

有一个解决方法 - 添加一个 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字符串:

 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; }
   ..........
}

结果将是: 在此处输入图像描述

在此处输入图像描述

于 2016-09-06T04:58:40.550 回答