C# MVC Post操作未正确绑定
在ScenarioMeasures类型的场景模型中,我有3个属性。他们似乎张贴正确,但ScenarioTargets编号用于所有3个属性。我不得不相信,由于某些原因,它们没有正确绑定。为什么会这样 模型 公布数据 绑定数据C# MVC Post操作未正确绑定,c#,asp.net-mvc-4,model-binding,C#,Asp.net Mvc 4,Model Binding,在ScenarioMeasures类型的场景模型中,我有3个属性。他们似乎张贴正确,但ScenarioTargets编号用于所有3个属性。我不得不相信,由于某些原因,它们没有正确绑定。为什么会这样 模型 公布数据 绑定数据 万一将来有人碰到这个。。。这似乎与嵌套相同类型的对象有关。在本例中,三个BusinessModels.Models.Scenario在viewmodel中向下测量了多个级别 可以通过在viewmodel中执行单个字段,然后将这些传输字段复制到控制器中的对象来解析。它很难看,但
万一将来有人碰到这个。。。这似乎与嵌套相同类型的对象有关。在本例中,三个BusinessModels.Models.Scenario在viewmodel中向下测量了多个级别
可以通过在viewmodel中执行单个字段,然后将这些传输字段复制到控制器中的对象来解析。它很难看,但很管用。因此,您正在查看POST请求并查看正在发送的数据,然后在Visual Studio中为您的操作方法设置断点,这就是您如何查看发布的内容与控制器操作在其模型绑定中接收到的内容之间的差异的原因。发布的数据来自chrome,绑定的数据是控制器操作中VM中的scenario对象中的内容。问题肯定出在viewmodel代码上,也可能出在cshtml上,但一切都取决于它。请向我们展示您如何构建数据,以便将其发送到ViewModel中的控制器。我正在使用TextBoxFor helper。例如:@Html.TextBoxForm=>m.scenario.BaselineData.RGURate,{0:n2},新的{@class=form控件,@readonly=readonly,data_bind=value:RGURateHistoric}正确使用razor。我从来没有做过与击倒视图模型的剃须刀混合。可以发布调整和基线数据的部分示例视图吗。只需发布一个外部循环代码,内部只有一个控件。例如:@using@Html.beginform//blah。
public class EditScenarioViewModel
{
public Scenario scenario { get; set; }
public IEnumerable<SelectListItem> locations { get; set; }
public IEnumerable<SelectListItem> fiscalPeriods { get; set; }
public IEnumerable<SelectListItem> effectivePeriods { get; set; }
}
public class Scenario
{
//lots of other stuff, then...
[Required]
public ScenarioMeasures Adjustments { get; set; }
public ScenarioMeasures BaselineData { get; set; }
public ScenarioMeasures ScenarioTargets { get; set; }
//more stuff...
}
public class ScenarioMeasures
{
public decimal RGURate { get; set; }
public decimal RevRate { get; set; }
public int RevAmount { get; set; }
public decimal VideoRate { get; set; }
public decimal TSR { get; set; }
public decimal Home { get; set; }
public decimal CustomerRetentionRate { get; set; }
}
// POST: Scenario/Edit/5
[HttpPost]
public ActionResult Edit(int id, EditScenarioViewModel viewModel)
...
scenario.BaselineData.RGURate:0.77
scenario.Adjustments.RGURate:0.01
scenario.ScenarioTargets.RGURate:0.78
scenario.BaselineData.RevRate:0.83
scenario.Adjustments.RevRate:0.02
scenario.ScenarioTargets.RevRate:0.85
scenario.BaselineData.RevAmount:37931
scenario.Adjustments.RevAmount:300
scenario.ScenarioTargets.RevAmount:38231
scenario.BaselineData.VideoRate:0.73
scenario.Adjustments.VideoRate:0.04
scenario.ScenarioTargets.VideoRate:0.77
scenario.BaselineData.TSR:0.02
scenario.Adjustments.TSR:0.05
scenario.ScenarioTargets.TSR:0.07
scenario.BaselineData.Home:0.00
scenario.Adjustments.Home:0.00
scenario.ScenarioTargets.Home:0.00
scenario.BaselineData.CustomerRetentionRate:0.00
scenario.Adjustments.CustomerRetentionRate:0.00
scenario.ScenarioTargets.CustomerRetentionRate:0.00
Adjustments {BusinessModels.Models.ScenarioMeasures} BusinessModels.Models.ScenarioMeasures
CustomerRetentionRate 0 decimal
Home 0 decimal
RevAmount 38231 int
RevRate 0.85 decimal
RGURate 0.78 decimal
TSR 0.07 decimal
VideoRate 0.77 decimal
BaselineData {BusinessModels.Models.ScenarioMeasures} BusinessModels.Models.ScenarioMeasures
CustomerRetentionRate 0 decimal
Home 0 decimal
RevAmount 38231 int
RevRate 0.85 decimal
RGURate 0.78 decimal
TSR 0.07 decimal
VideoRate 0.77 decimal
ScenarioTargets {BusinessModels.Models.ScenarioMeasures} BusinessModels.Models.ScenarioMeasures
CustomerRetentionRate 0 decimal
Home 0 decimal
RevAmount 38231 int
RevRate 0.85 decimal
RGURate 0.78 decimal
TSR 0.07 decimal
VideoRate 0.77 decimal