C# Asp.NETMVC和模型被发送回客户端
我有一个屏幕,目前正在绘制中。但我需要在用户单击“添加”按钮时将项目添加到表中。我期望发生的是Post操作将模型中的一些属性添加到列表中,然后将更新后的模型发送回客户端。因此,用户在控件中输入了一个值,单击“添加”。。。完整模型将被发送回控制器。。。控制器读取属性并将它们添加到我的列表(这是模型的一部分)。然后将模型发送回视图,并根据列表中的项目构建一个模型 目前,我正在尝试:C# Asp.NETMVC和模型被发送回客户端,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个屏幕,目前正在绘制中。但我需要在用户单击“添加”按钮时将项目添加到表中。我期望发生的是Post操作将模型中的一些属性添加到列表中,然后将更新后的模型发送回客户端。因此,用户在控件中输入了一个值,单击“添加”。。。完整模型将被发送回控制器。。。控制器读取属性并将它们添加到我的列表(这是模型的一部分)。然后将模型发送回视图,并根据列表中的项目构建一个模型 目前,我正在尝试: public ActionResult AccountTransaction() { Li
public ActionResult AccountTransaction()
{
List<AccountDto> accounts = Services.AccountServices.GetAccounts(false);
List<PayeeDto> payees = Services.PayeeServices.GetPayees();
List<CostCenterDto> costCenters = Services.CostCenterServices.GetCostCenters();
List<TransactionTypeDto> transactionTypes = Services.TransactionTypeServices.GetTransactionTypes();
AccountTransactionView v = new AccountTransactionView
{
Accounts = (from a in accounts
where a.Deleted == false
select new SelectListItem
{
Text = a.Description,
Value = a.AccountId.ToString(),
Selected = false
}
),
Payees = (from p in payees
where p.Deleted == false
select new SelectListItem
{
Selected = false,
Text = p.Name,
Value = p.PayeeId.ToString()
}),
TransactionTypes = (from tt in transactionTypes
select new TransactionTypeView
{
Deleted = false,
Description = tt.Description,
Value = tt.TransactionTypeId
}).ToList(),
CostCenters = (from cc in costCenters
where cc.Deleted == false
select new SelectListItem
{
Selected = false,
Text = cc.Name,
Value = cc.CostCenterId.ToString()
}),
Deleted = false,
SelectedAccountId = 0,
SelectedCategoryId = 0,
SelectedSubCategoryId = 0,
SelectedBudgetId = 0,
TransactionDate = DateTime.Now
};
return View(v);
}
[HttpPost]
public ActionResult AccountTransaction(AccountTransactionView model)
{
model.TransactionSplitLines.Add(new TransactionSplitLine
{Amount = "100", Category = "Test", SubCategory = "Test More"});
return View("AccountTransaction", model);
}
public ActionResult AccountTransaction()
{
List accounts=Services.AccountServices.GetAccounts(false);
列出受款人=Services.PayeeServices.GetPayees();
List costCenters=Services.CostCenterServices.GetCostCenters();
List transactionTypes=Services.TransactionTypeServices.GetTransactionTypes();
AccountTransactionView v=新建AccountTransactionView
{
Accounts=(来自Accounts中的a)
其中a.Deleted==false
选择新的SelectListItem
{
Text=a.说明,
Value=a.AccountId.ToString(),
所选=错误
}
),
收款人=(来自收款人中的p)
其中p.Deleted==false
选择新的SelectListItem
{
所选=假,
Text=p.名称,
Value=p.payeId.ToString()
}),
TransactionTypes=(来自TransactionTypes中的tt)
选择new TransactionTypeView
{
已删除=错误,
描述=tt.描述,
Value=tt.TransactionTypeId
}).ToList(),
成本中心=(来自成本中心的cc)
其中cc.Deleted==false
选择新的SelectListItem
{
所选=假,
Text=cc.Name,
Value=cc.CostCenterId.ToString()
}),
已删除=错误,
SelectedAccountId=0,
SelectedCategoryId=0,
SelectedSubcategory ID=0,
SelectedBudgetId=0,
TransactionDate=DateTime.Now
};
返回视图(v);
}
[HttpPost]
public ActionResult AccountTransaction(AccountTransactionView模型)
{
model.TransactionSplitLines.Add(新建TransactionSplitLine
{Amount=“100”,Category=“Test”,SubCategory=“Test More”});
返回视图(“AccountTransaction”,模型);
}
因此,加载页面时将调用“public ActionResult AccountTransaction()”。。。HttpPost方法正在被击中。。。但是当我返回视图时。。。前端失败,因为模型现在似乎是空的。视图在此失败:
<td align="right">
<% foreach (var tt in Model.TransactionTypes)
{%>
<%=tt.Description %>
<%=Html.RadioButton("SelectedTransactionTypeId", tt.Value) %><br />
<%
}%>
</td>
这是突然发生的,Model.TransactionTypes现在为空。。。但是,为什么,因为我认为我返回的是同一个模型。是整个
模型
属性为空
还是仅仅是交易类型
属性?记住,模型绑定的工作原理是从post
中的数据构建对象。对于要在HttpPost
版本的AccountTransaction
方法的绑定模型中出现的每个TransactionTypeView
对象,它们需要出现在发送到服务器的表单中。讨论如何绑定对象集合(以及如何构造标记来处理它)。谢谢。当我取回模型时,它不是空的。。。但是我在第一个方法中为模型(transactionTypes)创建的属性都是null。但是,返回的值(日期编辑框..等)存在。看起来我需要再次构建这些列表值?这是最简单的解决方法,而且不会在您的页面上添加大量潜在不需要的数据。谢谢