C# 由于ID冲突,窗体未向控制器操作返回值
我有一张表格,上面有一个下拉列表。当我从下拉列表中选择ID时,选择一个日期并单击提交,我得到错误: 参数字典包含“Namesppace.Controllers.TerminalReceiptsController”中方法“System.Web.Mvc.ActionResult Index(Int32,System.DateTime,NameSpace.ViewModels.TerminalReceiptPostData)”的非空类型“System.Int32”的参数“CasinoID”的空项。可选参数必须是引用类型、可为null的类型或声明为可选参数。 参数名称:参数 它只需要一个常规的输入标记并手动输入就可以了。。。然而,当我为这个问题添加一个dropdownlist时,出现了这个问题。我是否设置了DDL错误?关于为什么会发生这种情况还有其他问题吗?下面是一些代码 控制器操作:C# 由于ID冲突,窗体未向控制器操作返回值,c#,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,我有一张表格,上面有一个下拉列表。当我从下拉列表中选择ID时,选择一个日期并单击提交,我得到错误: 参数字典包含“Namesppace.Controllers.TerminalReceiptsController”中方法“System.Web.Mvc.ActionResult Index(Int32,System.DateTime,NameSpace.ViewModels.TerminalReceiptPostData)”的非空类型“System.Int32”的参数“CasinoID”的空项。可
[HttpPost]
public ActionResult Index(int CasinoID, DateTime Date)
{
var model = TRBL.GetTransactionTestsData(CasinoID, Date);
return View(model);
}
视图:
更改为DDL:
@Html.DropDownList("CasinoID", Model.TerminalReceiptPostData.CasinoIdDDL, "Select Casino")
int CasinoID
将由名为CasinoID
的表单字段绑定。我认为@Html.DropDownListFor没有生成您想要的“名称”
您可以像这样显式地添加名称
@Html.DropDownListFor(o => o.TerminalReceiptPostData.CasinoIdDDL, Model.TerminalReceiptPostData.CasinoIdDDL, new { id = "CasinoID", name="CasinoID"})
或者最好创建一个带有CasinoID、Date和CId字段的ViewModel,并在该ViewModel实例上使用
BindProperty
,好的,我知道了发生了什么
实际上,我有两个单独的控制器操作,名为Index。一个用于邮寄,一个用于获取。由于我现在发回一个模型后一,下拉列表没有得到“重新填写”的下拉列表。。。因此,我只是从我的GET action中接了一个电话,并将其添加到帖子中
[HttpPost]
public ActionResult Index(int CasinoID, DateTime Date)
{
var id = Int32.Parse(Request.Form["CasinoID"].ToString());
var model = TRBL.GetTransactionTestsData(id, Date);
model.TerminalReceiptPostData = TRBL.GetCasinosDDL();
return View(model);
}
可能不是最好的方法,但效果很好。是的,我很确定这就是正在发生的事情。我试着把它放在一个盒子里,它看起来很可怕。我会试试这个让你知道。不,同样的错误。不过还是有道理的。。我想这会有用的。你能从浏览器中检查表单POST中传递的值吗?(F12->Chrome中的网络选项卡)是否将“CasinoID”传递到服务器?似乎不是。通过对下拉列表的更改,我能够获得正确传递的CasinoID值@Html.DropDownList(“CasinoID”,Model.TerminalReceiptPostData.CasinoIdDDL,“Select Casino”)``我可以调试并查看整个过程……但是现在,当页面重新加载所需的结果时,我会遇到一个不同的错误,
对象引用未设置为下拉列表行上对象的实例。我还在控制器操作中使用它来处理值``var id=Int32.Parse(Request.Form[“CasinoID”].ToString());```我现在将var id传递给TRBL()函数调用。
@Html.DropDownListFor(o => o.TerminalReceiptPostData.CasinoIdDDL, Model.TerminalReceiptPostData.CasinoIdDDL, new { id = "CasinoID", name="CasinoID"})
[HttpPost]
public ActionResult Index(int CasinoID, DateTime Date)
{
var id = Int32.Parse(Request.Form["CasinoID"].ToString());
var model = TRBL.GetTransactionTestsData(id, Date);
model.TerminalReceiptPostData = TRBL.GetCasinosDDL();
return View(model);
}