Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 由于ID冲突,窗体未向控制器操作返回值_C#_Asp.net Mvc_Asp.net Mvc 4_Razor - Fatal编程技术网

C# 由于ID冲突,窗体未向控制器操作返回值

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”的空项。可

我有一张表格,上面有一个下拉列表。当我从下拉列表中选择ID时,选择一个日期并单击提交,我得到错误:

参数字典包含“Namesppace.Controllers.TerminalReceiptsController”中方法“System.Web.Mvc.ActionResult Index(Int32,System.DateTime,NameSpace.ViewModels.TerminalReceiptPostData)”的非空类型“System.Int32”的参数“CasinoID”的空项。可选参数必须是引用类型、可为null的类型或声明为可选参数。 参数名称:参数

它只需要一个常规的输入标记并手动输入就可以了。。。然而,当我为这个问题添加一个dropdownlist时,出现了这个问题。我是否设置了DDL错误?关于为什么会发生这种情况还有其他问题吗?下面是一些代码

控制器操作:

    [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);

    }