【发布时间】:2016-04-25 21:29:55
【问题描述】:
我有一些运行异常的代码,想知道是否有其他人遇到过这个问题。
我有一个视图模型,它通过存储过程和 vb 对象从数据库中收集数据(不,我不知道 vb 这是遗留的)
当我执行程序时,数据会通过控制器按预期收集。当我调试它时,我可以看到我的所有参数都填充了信息。但是,当涉及到视图时,它说参数为空。我已经包含了我的代码
型号:
public class PersonIncomeViewModel
{
public string IncomeTypeDesc { get; set; }
public string IncomeDesc { get; set; }
public string Income { get; set; }
}
public class PersonIncomeListViewModel
{
public int? PersonId { get; set; }
public List<PersonIncomeListItem> Incomes { get; set; }
public PersonIncomeListViewModel()
{
Incomes = new List<PersonIncomeListItem>();
}
}
public class PersonLookupViewModel : Queue.QueueViewModel
{
public int Action { get; set; }
public bool ShowAdvancedFilters { get; set; }
//Person Search Variables
[Display(Name = @"Search")]
public string SpecialSearch { get; set; }
[Display(Name = @"Person Id")]
public int? PersonId { get; set; }
[Display(Name = @"Full Name")]
public string FullName { get; set; }
[Display(Name = @"SSN")]
public string SSN { get; set; }
public string AddressStatus { get; set; }
public string EmploymentStatus { get; set; }
public PersonIncomeViewModel Income { get; set; }
public List<PersonIncomeListItem> Incomes { get; set; }
public PersonLookupViewModel()
{
Income = new PersonIncomeViewModel();
Incomes = new List<PersonIncomeListItem>();
}
}
控制器:
public ActionResult _Income(int id)
{
var vm = new PersonLookupViewModel();
var personManager = new dtPerson_v10_r1.Manager( ref mobjSecurity);
//var person = personManager.GetPersonObject((int)id, vIncludeIncomes: true);
var person = personManager.GetPersonObject(id, vIncludeIncomes: true);
var look = JsonConvert.SerializeObject(person.Incomes);
foreach (dtPerson_v10_r1.Income income in person.Incomes)
{
if (income.IncomeType_ID == 0)
{
var item = new PersonIncomeListItem
{
IncomeTypeDesc = "Unknown",
IncomeDesc = income.IncomeDesc,
Income = mobjFormat.FormatObjectToCurrencyString(income.Income)
};
vm.Incomes.Add(item);
}
if (income.IncomeType_ID == 1)
{
var item = new PersonIncomeListItem
{
IncomeTypeDesc = "Alimony",
IncomeDesc = income.IncomeDesc,
Income = mobjFormat.FormatObjectToCurrencyString(income.Income)
};
vm.Incomes.Add(item);
}
if (income.IncomeType_ID == 2)
{
var item = new PersonIncomeListItem
{
IncomeTypeDesc = "Child Support",
IncomeDesc = income.IncomeDesc,
Income = mobjFormat.FormatObjectToCurrencyString(income.Income)
};
vm.Incomes.Add(item);
}
}
return PartialView(vm);
}
查看:
@using dtDataTools_v10_r1
@using ds_iDMS.Models.Person
@model ds_iDMS.Models.Person.PersonLookupViewModel
@{
var format = new dtDataTools_v10_r1.CustomFormat();
var newInitials = (Model.Income.IncomeTypeDesc.First().ToString() + Model.Income.IncomeDesc.First().ToString() + Model.Income.Income.First().ToString()).ToUpper();
}
using (Html.DSResponsiveRow(numberOfInputs: ExtensionMethods.NumberOfInputs.TwoInputs))
{
using (Html.DSCard(ExtensionMethods.Icon.CustomText, iconInitials: newInitials, color: ExtensionMethods.Colors.PrimaryBlue))
{
<div>@Model.Income.IncomeTypeDesc</div>
<div>@Model.Income.IncomeDesc</div>
<div>@Model.Income.Income</div>
}
}
我们已经构建了一些扩展,但它们与问题无关
出错的行是这一行:
var newInitials = (Model.Income.IncomeTypeDesc.First().ToString() + Model.Income.IncomeDesc.First().ToString() + Model.Income.Income.First().ToString())。 ToUpper();
它驱动视图上的所有扩展方法,当我在它上面运行调试器时,所有参数都读取为 null,但是就像我说的,当我运行调试器并在控制器中检查它们时,它们被正确填充。
很抱歉这篇文章很长,但我想确保所有细节都在那里
【问题讨论】:
-
不明白你在做什么,
income不应该是decimal吗? -
首先我会尝试将代码移动到普通视图 - 只是为了检查它是否是与 PartialView 相关的问题。其次,我将通过 ViewBag/ViewData 传递对象,以检查对象传递方式是否存在问题或模型是否存在一般问题。 “Queue.QueueViewModel”中的所有属性都有get/set吗?
-
@maltmann - 是的,所有 Queue.QueueViewModel 属性都有正确的获取/设置。我将尝试通过 ViewBag 传递它来检查它。但是,当我在即时窗口中检查它们时,它正在通过,但一切皆有可能:-)
-
@jamiedanq - 我们有转换扩展,因为模型非常庞大。因此,我们只需将模型中的所有内容作为字符串传递,以加快编码速度,然后使用扩展来确保它们的格式正确。
-
@MaximusPrime 你的
Viewname 是什么?
标签: c# asp.net-mvc