当.NET尝试执行控制器方法时,为什么会出现此异常?

时间:2014-07-03 16:08:58

标签: c# asp.net-mvc

我是C#/ ASP.NET MVC框架的新手,我遇到了以下问题。

我有一个名为DeleteExecutableType.cshtml的视图:

@model DataModel.MaliciousCode.Malicious

@{
    ViewBag.Title = "DeleteExecutableType";
    Layout = "~/Views/Shared/MasterPageMobile.cshtml";
}

<h2>DeleteExecutableType</h2>

<h2>Malicious: @Model.Id</h2>
<h2>Fix: @Model.MaliciousCodeExecutableType[0].Title (id: @Model.MaliciousCodeExecutableType[0].Id)</h2>

<p>
    Confermare la cancellazione dell'Executable Type "@Model.MaliciousCodeExecutableType[0].Title" ?
</p>

@using (Html.BeginForm("DeleteExecutableType", "EditingMalicious", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    <input type="hidden" name="executableTypeId" value ="@Model.MaliciousCodeExecutableType[0].Id" />
    <input type="hidden" name="maliciousId" value ="@Model.Id" />


    <div data-role="controlgrup" data-type="horizontal" data-mini="true">
        <a href="@Url.Action("Edit", "Malicious", new { id = Model.Id })#tab-3" data-mini="true"  data-inline="true" data-role="button"  >Annulla</a>

        <input type="submit" value="Delete" data-mini="true" data-inline="true" />
    </div>
}

当用户点击Delete按钮提交表单时,将调用DeleteExecutableTypePost()类中定义的方法EditingMaliciousController

这是:

[HttpPost, ActionName("DeleteExecutableType")]
[ValidateAntiForgeryToken]
public ActionResult DeleteExecutableTypePost(long maliciousId, long currentExecutableTypeId)
{
            if (maliciousId == null | currentExecutableTypeId == null)
            {
                return HttpNotFound();
            }

            manager.openConnection();
            try
            {
                manager.deleteSingleExecutableType(maliciousId, currentExecutableTypeId);
            }
            finally
            {
                manager.closeConnection();
            }

            return new RedirectResult(Url.Action("Edit", "Malicious", new { id = maliciousId }) + "#tab-2");
}

问题在于,当我尝试执行上一个方法时,出现错误:

  

参数字典包含参数&quot; currentExecutableTypeId&#39;的空条目。非可空类型的System.Int64&#39; for method&#39; System.Web.Mvc.ActionResult DeleteExecutableTypePost(Int64,Int64)&#39;在&#39; MyWebApplication.Controllers.EditingMaliciousController&#39;。可选参数必须是引用类型,可空类型,或者声明为可选参数。

     

参数名称:参数

     

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

     

异常详细信息:System.ArgumentException:参数字典包含参数&quot; currentExecutableTypeId&#39;的空条目。非可空类型的System.Int64&#39; for method&#39; System.Web.Mvc.ActionResult DeleteExecutableTypePost(Int64,Int64)&#39;在&#39; MyWebApplication.Controllers.EditingMaliciousController&#39;。可选参数必须是引用类型,可空类型,或者声明为可选参数。

     

参数名称:参数

为什么呢?我错过了什么?我该如何解决这个问题?

TNX

2 个答案:

答案 0 :(得分:1)

这是因为你没有一个名为currentExceutableTypeId的输入,textarea或select,它不能从帖子集合中绑定。

改变这个:

<input type="hidden" name="executableTypeId" value ="@Model.MaliciousCodeExecutableType[0].Id" />

到这个

<input type="hidden" name="currentExecutableTypeId" value ="@Model.MaliciousCodeExecutableType[0].Id" />

一切都应该是好的

答案 1 :(得分:0)

问题是您的表单字段名为executableTypeId,操作方法参数为currentExecutableTypeId。将这两个命名为相同,你应该没问题。