ASP。 NET控制器接收空数组 - javascript

我正在编写Angular.js / ASP.NET应用程序。
我已经定义了这个模型:

public class Dealer : EntityBase
{
    ...
    public virtual List<DealerDefinedService> DealerDefinedServices { get; set; }
    public virtual List<DealerDefinedServicesDiscount> DealerDefinedServicesDiscounts { get; set; }
    ...
}

我有一个可以接收该模型的控制器:

[HttpPost]
public ActionResult Edit(Dealer model)
{
    if (ModelState.IsValid)
    {
        dealerService.EditDealer(model);

        return RedirectToAction("Index");
    }
    return View("Create", model);
}

在我的Angular.js控制器中,我尝试发送此对象:

{
  "DealerDefinedServices": [
    {
      ...
    }
  ],
  "DealerDefinedServicesDiscounts": [
    {
      ...
    }
  ]
}

如果同时设置了“ DealerDefinedServices”和“ DealerDefinedServicesDiscounts”参数,则ASP.NET控制器仅接收其中一个,而其他则变为空。我试图解决这个问题已经好几个小时,最后通过重命名提到的参数之一来解决它,因为我认为也许问题在于参数名称相似。那么,这是什么问题,如果控制器具有相似的名称,为什么控制器看不到参数之一?

参考方案

可能是默认模型活页夹中的FormValueProvider感到困惑。
它有一个
 ContainsPrefix(String)
方法可能是罪魁祸首。
尝试将第二个参数重命名为

  Dealer1DefinedServices折扣

然后通过命名重试一次

  DealerDefinedServices1折扣

前者应正常工作,而后者应重现空问题。

这种行为的原因

默认模型绑定器使用FormValueProvider从请求中提取字段值,并将其放入您的Dealer模型中。
FormValueProvider使用ContainsPrefix方法在请求中找到字段,在本例中为$ scope.model对象。
我的猜测是,ContainsPrefix向模型绑定程序返回了不正确的信息,因为前缀DealerDefinedServices对于模型中的两个属性都是通用的。

我对模型绑定器没有足够的知识,无法评论代码的执行顺序以及为什么模型绑定器使一个属性为空。

正如您已经尝试过的那样,已经更改了属性名称,以使它们没有相同的前缀将解决此问题。

要尝试的另一件事可能是在MVC中使用WebAPI代替操作方法。 Action方法的模型绑定程序希望接收一个表单对象(因此名为FormValueProvider)。由于您传递的实际上是一个json / javascript对象,因此WebAPI模型绑定程序在绑定它时可能会更有效。注意:我还没有尝试过,WebAPI可能有同样的问题。

ASP.NET-如何更改JSON序列化的方式? - javascript

我正在使用ASP.NET通过以下查询返回Json文件:public ActionResult getTransactionTotals(int itemID) { DBEntities db = new DBEntities(); var query = from trans in db.Transactions // Linq query removed …

通用日期时间格式 - javascript

我正在开发一个将日期时间从JavaScript(客户端)发送到Web服务(服务器端)的应用程序。现在,DateTime的问题在于它具有多种格式,并且在任何情况下客户端都可能具有与服务器不同的DateTime格式,这可能会中断服务器端对datetime的解析。我以为JavaScript的函数“ getTime()”将等同于C#的datetime属性“ Tick…

asp.net mvc或javascript将另一页的结果返回给方法 - c#

是否可以将另一个页面的结果返回给JavaScript方法或C#控制器操作?我有一个共享的复杂页面,该页面在我的网站上遍布使用,当前用于在C#后端的用户数据上设置单个变量。当用户完成共享的复杂页面后,我将返回引用页面。当用户在刷新或返回时将其作为url参数传递给返回的页面时,我返回的页面包含新选择的变量。我有一个新页面,我希望从我的共享复杂页面中返回该变量。但…

在JavaScript中运行方法C# - javascript

打扰一下,我有这种C#asp方法。受保护的无效btnSave_Click(对象发送者,EventArgs e)有谁知道我该如何发送脚本给您?可以办到?。 javascript大神给出的解决方案 是的,那可以做到。为此,您在.aspx.cs页中创建了函数,然后单击保存按钮上的代码将其复制到函数中,然后执行以下步骤。//Call cs method from J…

在C#中将文本转换为绣花针 - javascript

                                                                                                                    我正在像http://www.vistaprint.in/vp/ns/easypath/studio.aspx?template…