我是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
答案 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
。将这两个命名为相同,你应该没问题。